n_elloco
@n_elloco
Python/Django developer

Как правильно отображать время после смены таймзон?

Имеется приложение на Django. В некоторых моделях используется DateTimeField, что соответствует в PostgreSQL типу timestamp with timezone.

Приложение работает в таймзоне Europe/Moscow. До обновления tz_data приложение работало со смещением +4. То есть если я сохранял 01-01-2014 в postgres писалось 01-01-2014 00:00:00+04.

После обновления tz_data приложение работает со смещением +3. Если теперь, допустим, мы извлекаем какую-нибудь запись по id то в ответе в поле с датой придет 31-12-2013 (т.к. postgres переведет время под пояс приложения 31-12-2013 23:00:00+03). Соответственно ломается фильтр по дате. Теперь, отбирая на 01-01-2014, я не получу записи, которые раньше записывал этой датой.

На скорую руку, это упущение залатали тем, что установили в приложении таймзону со старым смещением (в нашем случае Asia/Dubai). Фильтры замечательно работают, даты отдаются нормально. НО, возникла другая проблема. В некоторые модели пишется время изменения (т.е. текущее время). Функция datetime.now() извлекает текущее серверное время, допустим 15:00, а затем прибавляет еще один час (т.к. сервер в таймзоне +3, а приложение - в +4). Вследствие чего пользователь видит, что редактировал свою запись в 16:00, хотя сейчас 15:00.

Вопрос: как укротить все-таки пояса. Хотелось бы, чтобы приложение работало в своей таймзоне +3 и при этом бы старые сохраненные записи со временем не смещало на час назад.
  • Вопрос задан
  • 2570 просмотров
Пригласить эксперта
Ответы на вопрос 1
mututunus
@mututunus
Backend developer (Python, Golang)
Используйте timezone.now() вместо datetime.now()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы