Как остановить преобразование временной метки в django postgresql - PullRequest
0 голосов
/ 21 февраля 2019

Когда я вставляю метку времени в таблицу Postgres в EST (2019-02-21 05:37:46) и в Postgresql таблица хранит в IST (2019-02-21 16:07:46).Я хочу, чтобы время хранилось только в EST.Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Как правило, вы должны обрабатывать все даты в 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 в другом ответе.

Подробнее см. здесь

0 голосов
/ 21 февраля 2019

В postgres вы можете изменить маску формата по умолчанию для datetimes , используя набор n postgres, вы можете изменить маску формата по умолчанию для datetime, используя набор datestyle

для получения более подробной информации перейдите по этой ссылке

, а также по этой ссылке

Насколько мне известно, в PostgreSQL нет настройки, которая бы сбрасывала секундыиз литералов меток времени по умолчанию

...