2015-12-17 2 views
2

Время в Стокгольме (Европа): 15: 0x. Но я получаю локализованное время на 1 час:Почему 1 час не так?

>>> datetime.datetime.now() 
datetime.datetime(2015, 12, 17, 15, 2, 42, 633000) 
>>> babel.dates.format_datetime(datetime.datetime.now(), 'full', tzinfo=pytz.timezone('Europe/Stockholm'),locale='en') 
u'Thursday, December 17, 2015 at 4:02:49 PM Central European Standard Time' 
>>> 

Какая ошибка?

+0

Почему downvote? Я действительно старался правильно заняться. –

+2

часовой пояс, очевидно ... почти в любое время, когда вы получите ожидаемую дату ровно на 1 час (или несколько ее), это будет связано с временной зоной. –

+0

@MarcB Да и как? Я прямо указывал часовой пояс на «Европу/Стокгольм». –

ответ

0

Проблема, по-видимому, была испечена в местное время вызова datetime.datetime.now(). Как уже упоминалось в комментариях, используйте datetime.datetime.utcnow() для временной зоны агностик coordinated universal time, или введите нужные данные временной зоны в вызов даты и времени datetime.datetime.now(tz=pytz.timezone('Europe/Stockholm'))

+0

Это решение Я использую сейчас. –

+2

и все же, как-то downvoted :), наслаждайтесь, счастливые программирования – Busturdust

4

Явное лучше, чем неявное. Установите часовой пояс для now:

now = datetime.datetime.now(tz=pytz.timezone('Europe/Stockholm')) 
+0

Спасибо! Хорошо, что мы можем это сделать. Результат довольно опрятный. –

+0

@ Programmer400: преимущество заключается в том, что '.now (tz)' работает даже во время переходов DST, когда местное время может быть неоднозначным. Если вам нужно сделать временной зонирование существующим наивным объектом datetime, тогда используйте 'tz.localize (dt, is_dst = None)'. – jfs

+1

['.now (tz)' всегда работает] (http://stackoverflow.com/q/31886808/4279). 'datetime (tzinfo = tz)' WRONG, если 'tz' не является часовым поясом с фиксированным смещением. – jfs

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