2010-04-17 6 views
12

Если я конвертирую UTC datetime в шведский формат, включается летнее время (CEST). Однако, создавая datetime с sweden в качестве часового пояса, он получает CET вместо CEST. Почему это?Python datetime не включая DST при использовании часового пояса pytz

>>> # Modified for readability 
>>> import pytz 
>>> import datetime 
>>> sweden = pytz.timezone('Europe/Stockholm') 
>>> 
>>> datetime.datetime(2010, 4, 20, 16, 20, tzinfo=pytz.utc).astimezone(sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CEST+2:00:00 DST>) 
>>> 
>>> datetime.datetime(2010, 4, 20, 18, 20, tzinfo=sweden) 
datetime(2010, 4, 20, 18, 20, tzinfo=<... 'Europe/Stockholm' CET+1:00:00 STD>) 
>>> 

ответ

11

Объект sweden определяет часовой пояс CET по умолчанию, но содержит достаточно информации, чтобы знать, когда начинается CEST и остановки.

В первом примере вы создаете объект datetime и преобразуете его в локальное время. Объект sweden знает, что время UTC, которое вы прошли, происходит во время летнего времени и может соответствующим образом преобразовать его.

Во втором примере конструктор datetime всегда интерпретирует ваш вход как не-дневное время сбережения и возвращает соответствующий объект.

Если datetime обработал ваш вход в качестве времени настенных часов и выбрал для вас подходящую настройку дневного света, в течение года, когда часы будут установлены назад, возникнет двусмысленность. На настенные часы тот же час происходит дважды. Следовательно, datetime заставляет вас указать, какой часовой пояс вы используете при создании объекта datetime.

+0

благодарит за информацию! Кроме того, функция локализации объекта pytz.timezone может использоваться для построения локализованного datetime вместо datetime (..., tzinfo = ) – Jesper

+4

@Jesper: [pytz docs] (http://pytz.sf.net)) явно говорят использовать .localize() вместо конструктора datetime с параметром tzinfo для часового пояса с DST. – jfs

0

Сокращения от часовых поясов не являются уникальными. Например, «IST» может относиться к «ирландскому стандартному времени», «иранскому стандарту времени», «индийскому стандарту времени» или «стандартное время Isreali». Вы не должны полагаться на разбор этого, и вместо этого должны использовать zoneinfo-часовые пояса.

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