Как правило, вы должны обрабатывать все даты в UTC, потому что это абсолютные метки времени, которые всегда верны.Даже если вы хотите, чтобы пользователи в часовом поясе EST использовали ваш веб-сайт, часовой пояс EST имеет летнее время (DST) летом, так что вы можете получить ошибочное поведение, когда время скачет (особенно, если есть наложениеодного часа, когда часы возвращаются).Это означает:
- Ваш код должен использовать метки времени UTC для выполнения расчетов и передавать
- Ваша база данных должна хранить дату и время UTC (что в любом случае делает PostgreSQL).
При представлении данных пользователю следует преобразовываться в местный часовой пояс.Это стандартное поведение в Django:
USE_TZ = True
по умолчанию TIME_ZONE = "America/New_York"
, чтобы установить часовой пояс по умолчанию, который будет учитывать DST
Таким образом, когда вы сохраняете дату-время с учетом времени в базе данных (скажем, в EST), база данных сохраняет его как UTC.Когда вы выбираете и отображаете его, Django покажет его в текущем часовом поясе пользователя (EST в вашем случае).Когда вы запрашиваете базу данных напрямую с помощью инструмента, PostgreSQL возвращает UTC, правильную дату и время, но ваша оболочка или инструмент могут отображать ее в местном часовом поясе.Вы можете отформатировать свой запрос, чтобы использовать другой часовой пояс, используя ссылки, опубликованные @c.grey в другом ответе.
Подробнее см. здесь