如何管理Web应用程序中的时区?

时间:2009-11-16 23:04:46

标签: django timezone utc pytz

我不想在我的网络应用程序中管理用户的不同时区,但我不知道从哪里开始。我必须将每个用户的本地时间保存在我的数据库中?,或者可能转换为UTC时间,保存它,然后再次进行转换以显示它?还是有另一种方法?例如,如果我的一个用户在当地时间预约,我必须将其转换为UTC将其存储在我的数据库中,然后当他需要时,再将其转换为当地时间显示它?顺便说一下,我正在使用Django。感谢。

4 个答案:

答案 0 :(得分:2)

  1. 将日期/时间存储为UTC(不确定Python的命令是什么)

  2. 输出日期时,将它们包装在获取当前用户时区偏好的辅助函数中,然后调整偏移的时间/日期,然后从应用程序输出。

  3. http://docs.python.org/library/time.html

    http://docs.python.org/library/datetime.html

答案 1 :(得分:1)

尝试使用Django snippit UTC DateTime field 。它实际上拥有您开箱即用所需的一切。

答案 2 :(得分:1)

  

转换为UTC时间,保存,然后再次进行转换以显示它?

是的,即使您只有一个本地时区,通常也应该将日期作为UTC时间戳存储在数据库中,并将其转换为Web应用程序输入和输出阶段中相应时区的文本。如果您存储了每个用户的时区,则可以轻松切换自定义时区的默认时区。

pytz是选择和转换时区的常用解决方案。 (虽然我亲自把自己不那么庞大的时区收集起来。)

答案 3 :(得分:0)

使用单个“数据库时间”时区是IMO最好的选择,因为: -

  • 它极大地简化了处理不同时区人员的程序
  • 可以更轻松地转换为其他时区
  • 任何人看到用户视图的上下文数据都可以假设它是UTC,而不必猜测一条记录的“12:45”是否为另一条记录的“12:45”
  • 标准很好

所以,是的。将用户的时区存储在数据库中,然后将所有时间存储在公共时间(如UTC)。当用户查看包括时间的任何内容时转换它们。这是最简单的解决方案,不仅强迫所有用户假装在同一时区。