Я изо всех сил пытаюсь выяснить, как работает часовой пояс в Джанго.В моих системах у меня есть все даты в UTC+00
, даже с настройкой UTC+02
TIME_ZONE.
timezone.get_default_timezone()
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>
timezone.get_current_timezone()
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>
Я использую PostgreSQL
в качестве базы данных и использую следующие настройки:
TIME_ZONE = 'Europe/Rome'
USE_TZ = True
Документация о PostgreSQL говорит:
... если вы используете PostgreSQL, вы можете свободно переключаться между USE_TZ = False и USE_TZ = True.Часовой пояс соединения с базой данных будет установлен на TIME_ZONE или UTC соответственно, так что Django получает правильные даты и времени во всех случаях.Вам не нужно выполнять какие-либо преобразования данных.
Если из оболочки я пытаюсь получить поле date_joined
для пользователя, это UTC + 00 и не преобразуется в UTC + 02 (как и ожидалось, так как я использую TIME_ZONE)
admin.date_joined
datetime.datetime(2017, 7, 12, 15, 22, 58, tzinfo=<UTC>)
str(admin.date_joined)
'2017-07-12 15:22:58+00:00'
Сериализованный объект (DRF) содержит ту же неправильную дату и время курса (в UTC + 00)
"date_joined": "2017-07-12T15:22:58Z",
Django также предлагаетвозможность установить любимый TIME_ZONE для конечного пользователя с помощью метода activ (), но это совсем другое.По умолчанию, когда я получаю данные из базы данных, все даты и времени должны быть преобразованы в относительные настройки TIME_ZONE, верно?
Чего мне не хватает?где я ошибаюсь?