【问题标题】:How to get daylight-saving-aware GMT如何获得夏令时感知 GMT
【发布时间】:2016-03-06 13:57:06
【问题描述】:

使用 Python/Django 1.5.4,我试图找到一种获取英国伦敦当前时间的方法。

这样做似乎非常复杂。

显然有time.time()、datetime.now()、datetime.utcnow(),但是这些方法返回的是服务器时间。

这是一个问题,因为服务器可能不在英国,并且上述方法没有考虑夏令时。

是否有一种简单、直接的方法可以做到这一点,而无需过多的导入和第三方应用程序?

【问题讨论】:

  • 你绝对不应该使用 Django 1.5。它在很长一段时间内一直不受支持,并且可能会受到许多安全问题的影响。至少升级到 1.8。
  • GMT 没有夏令时。您是指 GMT 还是 BST?
  • 不过,您的问题的答案几乎肯定可以在综合documentation on timezones 中找到。
  • 试试看这个答案:stackoverflow.com/questions/1398674/…
  • 非常感谢。是的,Django 1.5……告诉我……!正在将大型项目迁移到更新的版本。

标签: python django datetime time timezone


【解决方案1】:

当在 django 中使用 from django.utils import timezone and use timezone.now 时,不要使用 time.time()、datetime.now()、datetime.utcnow()。这是专门为处理 django 中的此类场景而设计的。如需进一步阅读,请查看here

【讨论】:

  • 谢谢。这就是我最终做的事情
  • @AliSkinner:您应该设置USE_TZ=True(如果settings.pydjango-admin startproject 生成,则设置它)以便timezone.now() 将返回一个可识别时区的日期时间对象(在UTC 时区中可能与伦敦时间不同)。设置TIME_ZONE=Europe/London,以便在模板中呈现时间时伦敦时间将成为默认时间(使用.activate() 更改每个请求的当前时区)。
  • @AliSkinner 如果您认为这是解决您的问题的最佳方法,请接受答案,以便其他人可以从中受益。谢谢..
【解决方案2】:

要获取英国伦敦的当前时间:

#!/usr/bin/env python 
from datetime import datetime
import pytz # $ pip install pytz

print(datetime.now(pytz.timezone('Europe/London')))

即使在当地时间可能不明确的 DST 转换期间,它也能正常工作。

django 中,设置USE_TZ=True 并使用timezone.now() 获取UTC 中的当前时间作为感知日期时间对象。它使用您可以使用.activate() 设置的当前时区在模板中呈现,否则使用TIME_ZONE 定义的默认时区。

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 2018-08-20
    • 2016-03-12
    • 2019-09-09
    • 2021-08-28
    • 2017-02-02
    • 2011-08-25
    • 2014-04-01
    • 2013-10-17
    相关资源
    最近更新 更多