如何在 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 应用程序中管理时区?的主要内容,如果未能解决你的问题,请参考以下文章