Как правильно отображать время после смены таймзон?
Имеется приложение на 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 и при этом бы старые сохраненные записи со временем не смещало на час назад.
Вариант не совсем подходит, т.к. есть сторонняя библиотека для записи логов. Форкать ее - не лучшее решение. Ну и плюс необходимо проходится по всему приложению и делать замену вызова now.
У меня схожая ситуация, и пока не разобрался.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2015, 10, 19, 15, 41, 32, 940067) # корректное время
>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2015, 10, 19, 12, 42, 55, 473772, tzinfo=) # не корректное время.
>>>
Если я правильно понимаю проблемя в модуле timezone? Кто-нибудь понял, как это поправить?