构建启用时区的应用程序时的最佳实践

时间:2010-12-04 14:18:46

标签: python datetime time timezone

我正在构建一个支持时区的Web应用程序,我正在寻找最佳实践。

例如,我有用户A和用户B,他们设置了时区。用户A输入时间。 (在他的时区。)现在如何将其存储在数据库中。

  • [选项1]原始时区的原始时间
  • [选项2] UCT时间存储在UCT中。

用例

  • 此时需要显示用户A。
  • 这次需要显示用户B.
  • Anon用户需要这次展示。
  • 需要计算时区差异。

我可以看到两种方式的优点。我并不是特别寻找这个问题的答案,而是特别关注构建时区感知网络应用程序的信息。

我正在使用Python,但也在寻找语言不可知的提示。

2 个答案:

答案 0 :(得分:4)

从语义上讲,您操作的几乎所有日期时间都是绝对时间(例如:计费,创作和修改,最后一次,api限制,SO赏金......)。它们应该以UTC格式存储,以免对它们产生歧义。否则,当某些政府更改DST规则并更新您的系统规则时,您存储的值将改变含义。

如果日期时间也指时间和地点(例如会议,一般日历),您可以将完整的符号日期存储在RFC 3339中,包括时区名称(与UTC不同) offset),并按需转换为UTC。

答案 1 :(得分:2)

一般来说,我认为将时间转换为通用格式(UTC)来存储它们更有意义,然后在显示它们时将它们转换为用户自己的时区。您可以根据IP地址猜测匿名用户,或者默认为可能的时区。

当然,这取决于你在做什么。对于很多事情,绝对时间很重要:例如如果有视频会议,则每个时区的人的开始时间必须相同。但是有一些情况是当地时间完成的。例如,Earth Hour是每个时区的晚上8:30到9:30。