3
Django初学者在这里。django时区支持混淆
在官方的文档:
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
试图做重现它在./manage.py
壳:
In [35]: from django.conf import settings
In [36]: settings.USE_TZ
Out[36]: True
In [37]: settings.TIME_ZONE
Out[37]: 'Europe/Moscow'
In [38]: from django.utils import timezone
# UTC
In [39]: timezone.now()
Out[39]: datetime.datetime(2015, 10, 16, 9, 47, 50, 755418, tzinfo=<UTC>)
# Actual time
In [40]: timezone.datetime.now()
Out[40]: datetime.datetime(2015, 10, 16, 12, 47, 54, 554197)
# UTC
In [41]: timezone.activate("Europe/Moscow"); timezone.now()
Out[41]: datetime.datetime(2015, 10, 16, 9, 47, 59, 405269, tzinfo=<UTC>)
# Actual time
In [42]: timezone.activate("Europe/Moscow"); timezone.datetime.now()
Out[42]: datetime.datetime(2015, 10, 16, 12, 48, 3, 179085)
当我跑步时timezone.now()
在文件规定,我越来越UTC这是不对的。当我运行timezone.datetime.now()
(我认为只是拨打datetime.datetime.now()
,这是使用全系统时区)我正在得到正确的东西。
尝试不同的时区,仍然得到纯UTC。
我在做什么错?
这很奇怪,我认为settings.USE_TZ的设置目的是自动转换为TIME_ZONE。 因此,如果我理解正确,USE_TZ = True以某种方式提供了将时区信息“注入”到timezone.now()对象的方法。我对吗? – mkurnikov
@mkurnikov:它并不奇怪:[最佳实践](http://stackoverflow.com/a/2532962/4279):在世界各地使用UTC,转换为本地时间显示:这正是django所做的。要理解为什么你应该尽可能地使用UTC,请考虑例如,如何查找日期时间过去24小时(http://stackoverflow.com/a/26313848/4279) – jfs
好吧,现在我理解。谢谢你的答案。 – mkurnikov