How to get daylight-saving-aware GMT
使用python/django 1.5.4,我试图找到一种方法来获取目前在英国伦敦的时间。
这样做似乎非常复杂。
显然有time.time()、datetime.now()、datetime.utcnow(),但这些方法返回服务器时间。
这是一个问题,因为服务器可能不在英国,上述方法不考虑日光节约。
有没有一种简单、直接的方法可以做到这一点,而无需过度导入和第三方应用程序?
- 你绝对不应该使用django 1.5。它已经有一段时间没有被支持,可能会受到许多安全问题的影响。至少升级到1.8。
- 格林威治标准时间没有夏令时。你是说格林尼治标准时间和英国夏令时?
- 但是,您的问题的答案几乎可以在有关时区的综合文档中找到。
- 请尝试检查以下答案:stackoverflow.com/questions/1398674/…
- 谢谢。是的,姜戈1.5…告诉我吧….在将大型项目迁移到较新版本的过程中。
要获取当前在英国伦敦的时间:
1 2 3 4 5
| #!/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定义的默认时区。
而不是使用time.time()、datetime.now()、datetime.utcnow(),在django中使用from django.utils import timezone and use timezone.now。这是专门为在Django处理这种情况而设计的。如需进一步阅读,请查看此处。
- 谢谢。这就是我最后所做的
- @Aliskinner:您应该设置USE_TZ=True(如果settings.py是由django-admin startproject生成的,则设置此选项),以便timezone.now()返回一个时区感知的日期时间对象(在UTC时区中,该时间对象可能与伦敦时间不同)。设置TIME_ZONE=Europe/London,以便在模板中呈现时间时伦敦时间是默认时间(使用.activate()更改每个请求的当前时区)。
- @Aliskinner如果你认为这是解决问题的最佳方法,请接受答案,这样其他人也可以从中受益。谢谢。。