Django начинающий здесь.Confused by 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