2016-12-15 2 views
0

Я пытаюсь преобразовать строку UTC в объект python datetime.Объект datetime Python не отображает правильную дату

Строка, которую я хочу преобразовать: 2016-12-16T23:00:00.000Z и находится в формате UTC. Когда я конвертирую код в другой часовой пояс, я получаю 2016-12-16 23:00:00+01:00, что является правильным поведением.

Мой вопрос, почему, когда я получить доступ к datetime объект, на следующий день все еще 16 и не 17, как я бы ожидать, чтобы это произошло, когда 1 hour добавляется 23:00.

Что мне не хватает?

Мой код

tz = pytz.timezone("Europe/Ljubljana") 
dt = datetime.datetime.strptime(start_date, "%Y-%m-%dT%H:%M:%S.000Z") 
date = tz.localize(dt) 

print 'Date: ', date.strftime('%d') 
print 'Date: ', date 

Результат

Date: 16 
Date: 2016-12-16 23:00:00+01:00 
+0

попробуйте использовать дату = pytz.utc.normalize (tz.localize (DT)) или вам нужно поставить некоторые смещение –

ответ

1

Это ожидаемое поведение. dt не имеет часового пояса. Когда вы вызываете tz.localize(dt), вы просто назначаете часовой пояс.

Вот то, что вы хотите сделать:

tz = pytz.timezone("Europe/Ljubljana") 
dt = datetime.datetime.strptime(start_date, "%Y-%m-%dT%H:%M:%S.000Z") 
dt = dt.replace(tzinfo=pytz.utc) # you specify the time is UTC 
print dt.astimezone(tz) # and now you convert dt to your preferred timezone 

Вы получаете:

datetime.datetime(2016, 12, 17, 0, 0, tzinfo=<DstTzInfo 'Europe/Ljubljana' CET+1:00:00 STD>) 
Смежные вопросы