2015-07-19 2 views
1

Так у меня есть следующие данные, которые я хочу сохранить, который начинается в следующем формате:PostGreSQL запись DateTimes неправильно с Django

2015-07-26T17:00:00-0700 

В одном из взглядов моего заявления я беру вышеупомянутое время, используя parser:

from dateutil import parser 
date = parser.parse('2015-07-26T17:00:00-0700') 

Это возвращает:

2015-07-26 17:00:00-07:00 

идея была чтобы сделать его объектом DateTime. После этого я сохранить его в моем datebase так:

d = Events(name=event["name"], 
      location=event["location"], 
      description=event["description"], 
      event_time=date, 
      end_time=event.get("end_time", 'None'), 
      eventimage_url=event["cover"]["source"]) 
    d.save() 

Тогда, когда я запрос к базе данных

event_list = Events.objects.all() 
print event_list[0].event_time ## There is only one record in the database 

я получаю следующее:

2015-07-27 00:00:00+00:00 

Похоже Postgresql округляет вверх время в моей базе данных, и я не хочу, чтобы это делалось.

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'MY_APPLICATION', 
     'USER': 'MY_NAME', 
     'PASSWORD': '', 
     'HOST': 'localhost', 
     'PORT': '', 
    } 
} 

Вот операторы, используемые для создания моей базы данных:

BEGIN; 
CREATE TABLE "App_events" ("id" serial NOT NULL PRIMARY KEY, "name" varchar(128) NOT NULL, "location" varchar(128) NOT NULL, "description" varchar(10000) NOT NULL, "event_time" timestamp with time zone NOT NULL, "end_time" varchar(128) NOT NULL, "eventimage_url" varchar(300) NOT NULL); 
COMMIT; 

И это, как моя модель предназначена:

class Events(models.Model): 
    name = models.CharField(max_length=128) 
    location = models.CharField(max_length=128) 
    description = models.CharField(max_length=10000) 
    event_time = models.DateTimeField() 
    end_time = models.CharField(max_length=128) 
    eventimage_url = models.CharField(max_length=300) 

Кто знает, как это исправить?

+0

Это не округление. Он конвертируется в UTC. – Kevin

ответ

1

Я считаю, что время правильное, и нет ничего плохого - время на сервере базы данных возвращается к вам в UTC (потому что оно настроено для его сохранения таким образом) вместо -7 - если вы установите его на временную зону вы больше не будете иметь проблемы - но это, как правило, лучшая практика для хранения в формате UTC

вы можете установить любую найденную значение для любой временной зоны с использованием библиотеки как pytz

from pytz import timezone 
my_adjusted_date = timezone(valid_timezone).localize(datetime_value) 
0

для любой, у кого есть аналогичная проблема, вы должны изменить TIME_ZONE в своем файле setting.py. Использование из колонки TZ here

+0

Это решение, если вы всегда будете хранить информацию в определенном часовом поясе. – Incognos

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