2014-01-02 3 views
0

В проекте Django я храню поле Datetime в базе данных. Я получаю строку даты с веб-страницы и использую datetime.strptime() для преобразования в тип datetime и назначаю ее DatetimeField. Но когда я получаю поле и использую strftime для получения строки, это один выходной день, почему это происходит?Строка Datetime не соответствует после strftime() и strptime()

datestr = "2013-12-12"; 
expireDate = datetime.strptime(datestr, "%Y-%m-%d"); 
datamodel.time = expireDate; 
datamodel.save(); 

# when I get the model in another method 
expireDate = datamodel.time; 
datestr = expireDate.strftime("%Y-%m-%d"); # I get "2013-12-11" 

Я думаю, что это может иметь какое-то отношение к часовому поясу, но не имеет понятия, как его решить. Пожалуйста помоги!

+0

'expireDate = datamodel.time' какое значение имеет значение' print expireDate'? – karthikr

+0

Каков ваш часовой пояс в вашем файле настроек? – ray6080

+0

Вы используете поддержку часового пояса? –

ответ

5

Вы храните объекты datetime, а не только дату. Это означает, что время установлено в полночь в вашем местном часовом поясе. Возврат объекта datetime снова делает это в часовом поясе UTC, а для вас - 6 часов.

магазин объект DateTime с часовой пояс:

from django.utils.timezone import utc 

datestr = "2013-12-12" 
expireDate = datetime.strptime(datestr, "%Y-%m-%d") 
datamodel.time = expireDate.replace(tzinfo=utc) 
datamodel.save() 

Если вы обращаетесь только даты, вы можете также перейти к использованию DateField вместо DateTimeField:

datestr = "2013-12-12" 
expireDate = datetime.strptime(datestr, "%Y-%m-%d").date() 

date объекты не имеют временной зоны, связанной с ними.

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