Дата и время неверны в django - PullRequest
0 голосов
/ 26 марта 2020

Я в восточном стандартном времени (EST). Переход на летнее время начался 2 недели go, когда часы были переведены на 1 час вперед (таким образом, 17:00 стало 6:00). У меня есть USE_TZ = True. TIME_ZONE установлен в «EST».

В моем приложении есть форма, которая отправляет дату, например, 2 часа ночи. Эта дата, все еще 2 часа ночи, сохраняется в модели в виде поля DateTime: event.start = date. У меня есть представление, которое отображает дату, и страница показывает 2 часа ночи.

Проблема: event.start оценивается в 3 утра (EST) / 8 утра (UT C), 1 час спустя, что это предполагалось быть! Ввод был 2AM, он даже отображает 2AM в шаблонах, но по некоторым причинам внутренне event.start равно 8AM (UT C) / 3AM (EST).

Но по какой-то причине django.utils.timezone.now() дает мне правильное время 2 утра, а не 3 утра. Системное время моей ОС также дает правильное время, 2 часа ночи. Я хочу запланировать работу на 2 часа ночи, но вместо этого она будет назначена на 3 часа ночи, потому что по какой-то причине event.start установлен на 3 часа ночи!

Я хочу сохранить время в UT C. Как мне справиться с этим?

1 Ответ

0 голосов
/ 26 марта 2020

Eastern Standard Time не имеет летнего времени, это жесткое смещение от UT C. При переходе на летнее время места переключаются с Eastern Standard Time на Eastern Daylight Time (EDT).

Дополнительная информация: https://www.timeanddate.com/time/zones/est

Использование идентификатора Олсона обычно является лучшим решением. , Это идентификаторы, используемые в базе данных часовых поясов IANA. Они основаны на местоположении, поэтому при изменении местоположения TimeZone (включая переход на летнее время) все по-прежнему работает.

Пример места, которое меняет EST <-> EDT:

America/New_York

Попробуйте изменить TIME_ZONE от EST до идентификатора Олсона для выбранного вами местоположения.

...