我有一个应用程序,它当前在MySQL DATETIME和TIMESTAMP值中存储时间戳。但是,应用程序需要能够接受来自多个时区的用户的数据,并在其他用户的时区中显示时间戳。因此,这就是我计划修改申请的方式;我将不胜感激任何改进方法的建议。
数据库修改
查询修改
申请修改
附加说明
UTC_TIMESTAMP()与NOW()
的示例mysql> set time_zone = 'Australia/Canberra';
Query OK, 0 rows affected (0.06 sec)
mysql> select now(), utc_timestamp();
+---------------------+---------------------+
| now() | utc_timestamp() |
+---------------------+---------------------+
| 2010-06-06 14:31:36 | 2010-06-06 04:31:36 |
+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = 'America/Los_Angeles';
Query OK, 0 rows affected (0.00 sec)
mysql> select now(), utc_timestamp();
+---------------------+---------------------+
| now() | utc_timestamp() |
+---------------------+---------------------+
| 2010-06-05 21:31:43 | 2010-06-06 04:31:43 |
+---------------------+---------------------+
1 row in set (0.00 sec)
我在这里缺少什么,或者有没有人对这种方法有更好的建议?
答案 0 :(得分:1)
我在这里缺少什么,或者有没有人对这种方法有更好的建议?
你可能做得太多了。
只要您知道存储时间戳的时区,就可以轻松将其转换为其他时区。如果您使用的是现代版本的PHP,则内置DateTime class包含全面的时区管理。
您不一定需要转换数据库中的所有时区,如果它们已被视为本地时间并且已正确配置为使用本地时区,即他们已经是自我一致的了。您需要做的只是在将时间转换为用户的时区时将当地时间转换为用户的时区,并将带有时间戳的记录时区存储(对于在时间戳所有者的时区中查看时间的其他用户)。 / p>
否则,您的计划似乎经过深思熟虑和完善。