2015-03-04 3 views
0

Я использую ReportLab в Django. У меня есть модель со следующим полем:Django ReportLab Часовой пояс

time_stamp = models.DateTimeField(auto_now_add=True) 

И моя TIME_ZONE переменным settings.py устанавливаются в:

Africa/Johannesburg 

Я использую formset для заполнения этой модели. Поле time_stamp корректно сохраняет правильный часовой пояс, но когда я помещаю time_stamp в свой файл ReportLab pdf, часовой пояс устанавливается в UTC.

Например: time_stamp в сохраненной модели (как str(time_stamp)[:19] является:

2015-03-04 07:57:28 

Но time_stamp в PDF-документе (как str(time_stamp)[:19] является:

2015-03-04 05:57:28 

Ровно через 2 часа раньше (Африка/Йоханнесбург UTC + 2 часа).

Как установить часовой пояс для ReportLab? он указывается в settings.py или в views.py при создании pdf? Если нет решения, как добавить 2 часа в time_stamp?

Некоторые ответы предложили изменить auto_now_add=True на default=datetime.datetime.now(), но это создает предупреждение при миграции базы данных (используется наивное выражение).

+0

Что значение USE_TZ в настройках? –

+0

Привет. USE_TZ = True – wernerfeuer

+0

Не заметил настройки - изменил его на USE_TZ = False, и он работает! Спасибо за подсказку! – wernerfeuer

ответ

0

Я не являюсь пользователем Reportlab, но в целом я не думаю, что установка USE_TZ = False - правильный подход для решения вашей проблемы. Установите его обратно Правда, и вместо того, чтобы закрывать свое время штамповать себе нравится:

str(time_stamp)[:19] 

Вы должны попробовать применять Джанго date template filter в шаблоне, например:

{{ time_stamp|date:"SHORT_DATETIME_FORMAT" }} 

Это может сбивать с толку, как Django обрабатывает часовые пояса , Но лучше всего сохранять временные метки в вашей базе данных в UTC. Вы можете сослаться на часовой пояс FAQ Джанго:

https://docs.djangoproject.com/en/dev/topics/i18n/timezones/#time-zones-faq

Смежные вопросы