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

Jes*_*per 13 python timezone datetime utc pytz

如果我将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>)
>>>
Run Code Online (Sandbox Code Playgroud)

Dan*_*ach 12

sweden对象默认指定CET时区,但包含足够的信息以了解CEST何时启动和停止.

在第一个示例中,您将创建一个datetime对象并将其转换为本地时间.该sweden对象知道你通过了UTC时间在夏令时发生,并且可以将其相应地转换.

在第二个示例中,datetime构造函数始终将您的输入解释为not-daylight-savings-time并返回适当的对象.

如果datetime将您的输入视为挂钟时间并为您选择适当的夏令时设置,那么在时钟被设置的时间内会出现歧义.在挂钟上同一小时出现两次.因此,datetime强制您指定在创建datetime对象时使用的时区.

  • @Jesper:[pytz docs](http://pytz.sf.net)明确地说使用.localize()而不是datetime构造函数和tzinfo参数用于DST的时区. (4认同)