mysql - 时区处理 - 这是正确的方法吗?
问题描述
这是我第一次处理时区。这是场景:
- 服务器 + 数据库位于 UTC 时区
客户端 1 在 IST 客户端 2 在 EST
EST 客户端存储的数据应在 IST 中正确显示给客户端,反之亦然
- 服务器运行 cron 作业并从数据库中读取数据。它需要正确地向 EST 和 IST 客户端显示相应时区的通知
技术
- 服务器操作系统 - Ubuntu (EC2)
- 数据库 - MySQL (UTC)
- 后端服务器 - Node.js
- 前端 - Angular.js
我的想法
在数据库中,维护两列:created_at、timezone_offset
- created_at 将以 UTC 格式存储所有内容
- 偏移量将存储 UTC 和相应时区的差异示例:IST 的偏移量 = 330(以分钟为单位)=> 5 小时 30 分钟
每当向服务器发送带有日期的请求时:
- 选择本地日期时间(created_at)
- 查找与 UTC 的偏移量
- 将 created_at 转换为 UTC(使用时刻)
- 将转换后的 created_at ,偏移量发送到服务器
- 存储 created_at ,数据库中的偏移量
在服务器上运行 cron
- 使用 created_at + offset 从数据库中读取记录
返回 API 响应
- 返回 created_at(UTC 格式),json 响应中每条记录的偏移量
- 客户端使用 created_at + offset 显示日期时间(使用时刻)
这是处理时区的正确方法吗?
我应该在 MySQL 中对 created_at 使用 datetime 数据类型吗?
解决方案
推荐阅读
- macos - Mac 非活动窗口上的 QLabel::setText()
- oracle - 调用 BIP 报告时如何在 cURL 中传递参数?
- docker - 无法在 Mac 中使用 docker 从公共 IP 访问 apache
- reactjs - 如何将 D3 元素附加到 React 组件上?
- json - NetworkX 读取 Cytoscape json 错误?
- php - 如何识别路径代码覆盖率是否足够好(在循环中)
- r - 根据 .vars 之外的列转换多列
- python - 使用数据框处理 csv 文件时出现 KeyError
- python - KeyError:'id'当 may2One 关系 0d00 14
- dynamic - 滚动到相关部分时,Angular 8 突出显示动态生成的菜单项