【问题标题】:storing time in database for users in different time zones [duplicate]为不同时区的用户在数据库中存储时间[重复]
【发布时间】:2014-09-03 08:07:35
【问题描述】:

我有一个关于为不同时区的用户存储时间的问题。我的措辞可能有点绕,但请多多包涵。如果我只是将用户在 UTC 中访问我的 Web 应用程序的时间存储到 MySql 中,那么我可以忽略不同的时区吗?

例如,假设有两个用户生活在世界各地。有人说两人在他的时间 4:00 在网络应用程序中聊天。因此,另一个人可能必须在她的时间 1:00 访问,以便双方都能成功见面。如果我在 Mysql 中调用 UTC_Time() 当他们每个人在各自的时间登录到 Web 应用程序时,我会为他们两个都得到一个通用的 4:00 吗?非常感谢。

【问题讨论】:

  • 遵循的最佳标准是始终将系统时间和 mysql 时间设置为 UTC。始终将 UTC 时间存储在数据库中。大多数人不使用 mysql 函数来转换用户时区 - 相反,在您的应用程序代码中执行此操作。您从数据库中检索作为 UTC 的时间戳,然后在应用程序中转换为用户的本地时区,然后在响应中输出。

标签: mysql datetime timezone utc


【解决方案1】:

您已经进入了更复杂的编程领域之一。

如果您存储到数据库中的时间来自 MySQL 中的“now()”, 然后您将在正确的时间存储事件,然后使用 UTC 尺度来衡量它。其中,对于国际应用程序来说,可能是 做正确的事。

如果一个人只是“4:00”这个数字不会改变,除非你提供 您页面上的一个表格,用于输入时间,然后可以用于计算。 在这种情况下,您可以向每个用户询问其时区(例如,一次,在注册时), 并计算 UTC 以保存“4:00”,例如“11:00 UTC”。如果其他用户 登录后,您可以根据存储的 UTC 计算他的本地时间。

顺便说一句,如果您使用 Linux,您可以在 UTC 而不是本地时间上运行您的系统(它仍会显示本地时间,但内部时钟在 UTC 上运行)。如果您的系统是 Windows 或双引导系统,请不要这样做。 Windows 不喜欢在不同时区运行的系统。

来自 MySQL 手册:

CONVERT_TZ() 从给定的时区转换日期时间值 dt from_tz 到 to_tz 给定的时区并返回结果 价值

即类似:

SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
        -> '2004-01-01 13:00:00'

如果您将时间/日期存储为 GMT,而您的朋友注册并选择了“MET”

【讨论】:

  • 感谢您的回复。是否有返回每个用户本地时间的 MySql 函数?例如,当两个用户分别在 4:00 和 11:00 登录时,每个用户的功能应该分别给我 4:00 和 11:00。再次感谢!
  • 我已经编辑了回复,以便信息保持在一起。另外,请查看 MySQL 的优秀文档。
猜你喜欢
  • 2012-05-21
  • 2013-06-08
  • 1970-01-01
  • 2016-02-01
  • 2014-07-11
  • 2014-02-05
  • 2014-08-03
  • 2016-08-31
  • 1970-01-01
相关资源
最近更新 更多