Если я преобразовываю дату и время 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>)
>>>
Объект sweden
по умолчанию указывает часовой пояс CET, но содержит достаточно информации, чтобы знать, когда CEST начинается и заканчивается.
В первом примере вы создаете объект datetime
и конвертируете его в местное время. Объект sweden
знает, что указанное вами время UTC приходится на летнее время, и может соответствующим образом преобразовать его.
Во втором примере конструктор datetime
всегда интерпретирует ваш ввод как не-летнее-время и возвращает соответствующий объект.
Если datetime
обработает ваш ввод как время настенных часов и выберет для вас подходящую настройку перехода на летнее время, возникнет двусмысленность в течение года, когда часы будут переведены назад. На настенных часах один и тот же час встречается дважды.Следовательно, datetime
заставляет вас указать, какой часовой пояс вы используете при создании объекта datetime
.