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

Posted

技术标签:

【中文标题】如何在 Web 应用程序中管理时区?【英文标题】:How to manage timezones in a web application? 【发布时间】:2010-12-17 06:08:51 【问题描述】:

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

【问题讨论】:

世嘉,你找到解决办法了吗?也许您可以在下面将答案标记为已接受? 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

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

pytz 是选择和转换时区的常用解决方案。 (虽然我个人破解了我自己不那么压倒性的时区集合。)

【讨论】:

【参考方案3】:

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

它极大地简化了与不同时区的人打交道的日常工作 它允许更轻松地转换到其他时区 任何在用户视图之外看到数据的人都可以假设它是 UTC,而不必猜测一条记录的“12:45”是否是另一条记录的“12:45” 标准很好

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

【讨论】:

【参考方案4】:

试试 Django 代码段UTC DateTime field。实际上,它具有开箱即用的一切所需。

【讨论】:

另一种即用型 Django 解决方案有 code.google.com/p/django-timezones

以上是关于如何在 Web 应用程序中管理时区?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript日期 - 删除时区信息

Web 应用程序中的时区敏感日期和时间显示?

即使系统设置不正确,如何在JavaScript中找到正确的时区?

在 Web 应用程序中有效地处理不同的时区

如何更改 asp.net 应用程序的时区

在laravel中动态更改TimeZone