使用pytz时区时Python日期时间不包括DST

使用pytz时区时Python日期时间不包括DST,python,datetime,timezone,utc,pytz,Python,Datetime,Timezone,Utc,Pytz,如果我将UTC日期时间转换为瑞典格式,则包括夏季时间(CEST)。然而,当创建一个以瑞典为时区的日期时间时,它得到CET而不是CEST。为什么会这样 >>> # Modified for readability >>> import pytz >>> import datetime >>> sweden = pytz.timezone('Europe/Stockholm') >>> >>>

如果我将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>)
>>>
>#为了可读性而修改
>>>进口皮茨
>>>导入日期时间
>>>瑞典=pytz.时区(“欧洲/斯德哥尔摩”)
>>>
>>>datetime.datetime(2010,4,20,16,20,tzinfo=pytz.utc).astimezone(瑞典)
日期时间(2010、4、20、18、20、tzinfo=)
>>> 
>>>datetime.datetime(2010,4,20,18,20,tzinfo=sweden)
日期时间(2010、4、20、18、20、tzinfo=)
>>>

瑞典
对象默认指定CET时区,但包含足够的信息,可以知道CEST何时启动和停止

在第一个示例中,创建一个
datetime
对象并将其转换为本地时间。
sweden
对象知道您经过的UTC时间发生在夏时制期间,可以对其进行适当转换

在第二个示例中,
datetime
构造函数始终将您的输入解释为非夏令时,并返回适当的对象


如果
datetime
将您的输入视为墙上的时钟时间,并为您选择了适当的夏令时设置,则在时钟延迟的一年中会出现歧义。在挂钟上,同一小时出现两次。因此,
datetime
强制您指定在创建
datetime
对象时使用的时区。

时区缩写不是唯一的。例如,“IST”可指“爱尔兰标准时间”、“伊朗标准时间”、“印度标准时间”或“以色列标准时间”。您不应该依赖解析,而应该使用zoneinfo时区。

谢谢您提供的信息!此外,pytz.timezone对象的localize函数可用于构建本地化的datetime,而不是datetime(…,tzinfo=)@Jesper:明确地说,对于带有DST的时区,使用.localize()而不是带有tzinfo参数的datetime构造函数。