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

storing time in database for users in different time zones

本问题已经有最佳答案,请猛点这里访问。

我有一个关于为不同时区的用户存储时间的问题。我的措词可能会有点纠结,但请容忍。如果我只是将用户以UTC格式访问我的Web应用程序的时间存储到MySQL中,那么我可以忽略不同的时区吗?

例如,假设有两个用户生活在世界各地。其中一个说两个人在他4点的时候在网络应用上聊天。所以另一个人可能要在她1:00的时候进入,这样两个人才能成功地见面。如果我在MySQL中调用utc_time(),当他们每个人在各自的时间登录到web应用程序时,我会为他们两个都获得一个通用的4:00吗?非常感谢你。


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

如果存储到数据库中的时间是从MySQL中的'now()'派生的,然后您将在正确的时间存储事件,并使用测量它的UTC刻度。对于国际应用程序来说,做正确的事。

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

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

从MySQL手册:

CONVERT_TZ() converts a datetime value dt from time zone given by
from_tz to the time zone given by to_tz and returns the resulting
value

例如:

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

如果您将时间/日期存储为格林威治标准时间,并且您的朋友注册并选择了"会见"