一千萬個為什麽

搜索

使用pytz時區時,Python日期時間不包括DST

如果我將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>)
>>>

最佳答案

sweden 對象默認指定CET時區,但包含足夠的信息以了解CEST何時啟動和停止。

在第一個示例中,您將創建 datetime 對象並將其轉換為本地時間。 sweden 對象知道您在夏令時期間傳遞的UTC時間並且可以適當地轉換它。

在第二個示例中, datetime 構造函數始終將您的輸入解釋為not-daylight-savings-time並返回適當的對象。

如果 datetime 將您的輸入視為掛鐘時間並為您選擇適當的夏令時設置,那麽在時鐘被設置的時間內會出現歧義。在掛鐘上同一小時出現兩次。因此, datetime 會強制您指定在創建 datetime 對象時使用的時區。

轉載註明原文: 使用pytz時區時,Python日期時間不包括DST