Дата и время Python не включая DST при использовании pytz часового пояса

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

>>> # 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>)
>>>
13
задан Jesper 17 April 2010 в 20:24
поделиться

1 ответ

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

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

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

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

12
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

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