我应该在MySQL中将我的时间戳保存为UTC吗?

时间:2012-06-24 20:03:39

标签: mysql

假设我需要捕获订单,我需要在订单下达时保存时间戳。另外,我需要一种方法来根据用户请求密码重置代码的时间来跟踪令牌何时设置为过期。我的服务器位于TX,我如何容纳遍布美国的用户?我想做的最后一件事是询问他们所在的时区,所以我不知道如何处理UTC中的显示时间,这会让普通人感到困惑。

1 个答案:

答案 0 :(得分:2)

首先,您应该从存储中隔离 display 。仅仅因为您以特定方式存储值并不意味着您必须以这种方式显示它。

其次,考虑一下你实际捕获的内容:这是一个时间戳。 “现在”的全球观念。时区在这里并不重要 - 不同时区的两个合理的人会同意他们中的哪一个先下订单,而不管他们的时区。

因此将时间戳存储在UTC中是完全合理的。实际上,时间戳几乎总是最好以UTC格式存储。只有当你要求用户想到日期/时间时,本地时间才有意义。

至于如何在用户的本地时间显示值 - 这很棘手:

  • 你可以根据他们的送货地址等猜测它。
  • 您可以根据他们的IP地址猜测(可能会有一些有趣的问题)
  • 您可以猜测一次并将其存储在偏好设置中,以便可以在必要时进行修复
  • 您可以在Javascript中执行此操作,提供UTC值,然后将其转换为客户端的本地时间

(当猜测时区时,您总是可以使用UTC在Javascript中进行本地转换,以帮助使猜测准确无误。)