为不同时区的用户在数据库中存储时间

时间:2014-07-13 02:35:47

标签: mysql datetime timezone utc

我有一个关于为不同时区的用户存储时间的问题。我的措辞可能会有点卷曲,但请耐心等待。如果我只是存储用户以UTC格式访问我的Web应用程序到MySql的时间,那么我可以忽略不同的时区吗?

例如,假设有两个用户居住在世界各地。有人说,两人都在4点钟的时候在网络应用中聊天。那么另一个人可能必须在凌晨1点访问,以便两者都可以成功地见面。如果我在Mysql中调用UTC_Time(),当他们每个人在各自的时间登录到网络应用程序时,我会为他们两个获得一个通用4:00吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

你已经进入了一个比较复杂的编程领域。

如果存储到数据库中的时间是从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”