Django + FactoryBoy -> Postgres некорректно конвертирует datetime в utc
Ладно, это странный вопрос. У меня есть модель Django, которую я записываю в Postgres через FactoryBoy для тестирования.
contract = ContractFactory(
effective_date=datetime.datetime(2023, 1, 1, tzinfo=pytz.timezone('US/Central'))
)
Я нахожусь в США/Центральной части США, и я ожидаю, что база данных будет хранить объект в UTC. Время даты в Postgres должно быть 2023-01-01 06:00:00 UTC, поскольку разница между часовыми поясами составляет 6 часов.
Если я получаю объект обратно и печатаю дату, она оказывается неверной!
2023-01-01 05:51:00+00:00
Если я получаю его из Postgres напрямую, это тоже неправильно:
2023-01-01 05:51:00.000000 +00:00
Я проверил необработанное время в базе данных, и оно правильное. Postgres запущен в контейнере Docker, и если я сделаю select now()
, то время будет в точности соответствовать UTC.
Откуда это могло взяться?
Нашел ответ здесь: Неожиданные результаты преобразования часовых поясов в python
Использование функции datatime для создания времени не работает. Требуется создание времени даты и последующая локализация.