2014-11-04 2 views
0

У меня есть модель Django с DateTimeField с базой данных postgres 9.3 в качестве backend.Django DateTimeField с информацией о часовом поясе

measure_datetime = models.DateTimeField() 

В моей базе данных это создало колонку как этот

ALTER TABLE geoudis_weathermeasurements ADD COLUMN measure_datetime timestamp with time zone; 

типа

timestamp with time zone 

Как вы можете видеть, что сохраняет DateTime с часовым поясом. Я вставил данные с помощью другого инструмента. И когда я делаю простой такой запрос

SELECT measure_datetime from geoudis_weathermeasurements where "id" = 44525 
"2014-10-01 00:04:54+02" 

Это выглядит хорошо. Теперь я запрашиваю данные внутри Django, и это возвращается к той же строке объект Datetime с UTC часовой пояс

2014-09-30 22:04:54+00:00 
tzinfo=UTC 
_utcoffset=0:00:00 

Так выглядит как исчезла первоначальная информация часовой пояс. Конечно, я мог бы установить его в другой часовой пояс, но что, если я не знаю, в какой временной зоне данные были измерены? Сервер для отображения данных может находиться в другом часовом поясе. Поэтому я думал, что этот тип данных postgres (часовой пояс с меткой времени) хорош.

Я делаю что-то неправильно здесь? Спасибо за любую помощь или предложения.

EDIT1:

Если установить USE_TZ = в settings.py Ложные я получаю результат я хочу. Мне кажется, что это поведение предназначено джанго.

ответ

1

Я вообще не знаю Django, но могу вам сказать, что если вы не знаете, в какой часовой пояс (UTC offset) данные были измерены, тогда вы не знаете времени!

Вот варианты:

  1. Убедитесь, что вы работаете только с UTC (или с одним UTC смещение). Это лучше, но вы не всегда можете выбрать, что получите.
  2. Работайте только по местному времени. Это действительно хлопотно (компьютер меняет местоположение, пользовательские настройки часовых поясов, переключатели летнего времени, ...).
Смежные вопросы