Вопрос по pytz, utc, python, timezone, datetime – Python datetime без учета летнего времени при использовании pytz timezone

13

Если я конвертирую дату в формате UTC в шведский формат, включается летнее время (CEST). Однако при создании даты и времени со Швецией в качестве часового пояса он получает CET вместо CEST. Почему это?

>>> # 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>)
>>>

Ваш Ответ

2   ответа
0

«IST» может относиться к «ирландскому стандартному времени», «иранскому стандартному времени», «индийскому стандартному времени» или «стандартному времени Израиля». Вы не должны полагаться на это, а вместо этого должны использовать часовые пояса zoneinfo.

12

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

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

Во втором примереdatetime Конструктор всегда интерпретирует ваш ввод как not-daylight-Saving-Time и возвращает соответствующий объект.

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

@Jesper:Pytz Docs явно сказать, чтобы использовать .localize () вместо конструктора datetime с параметром tzinfo для часового пояса с DST. jfs
Спасибо за информацию! Кроме того, функция локализации объекта pytz.timezone может использоваться для построения локализованного datetime вместо datetime (..., tzinfo = <tz>) Jesper

Похожие вопросы