使用 pytz 时区时 Python 日期时间不包括 DST
Posted
技术标签:
【中文标题】使用 pytz 时区时 Python 日期时间不包括 DST【英文标题】:Python datetime not including DST when using pytz timezone 【发布时间】:2011-02-09 05:38:59 【问题描述】:如果我将 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>)
>>>
【问题讨论】:
【参考方案1】:sweden
对象默认指定 CET 时区,但包含足够的信息来了解 CEST 何时开始和停止。
在第一个示例中,您创建了一个datetime
对象并将其转换为本地时间。 sweden
对象知道您传递的 UTC 时间发生在夏令时,并且可以适当地转换它。
在第二个示例中,datetime
构造函数始终将您的输入解释为非夏令时并返回适当的对象。
如果datetime
将您的输入视为挂钟时间并为您选择了适当的夏令时设置,那么在一年中的时间调回时钟时会出现歧义。在挂钟上,同一小时出现两次。因此,datetime
强制您在创建 datetime
对象时指定您使用的时区。
【讨论】:
感谢您的信息!此外,pytz.timezone 对象的 localize 函数可用于构建本地化的日期时间,而不是 datetime(..., tzinfo=时区缩写不是唯一的。例如,“IST”可以指“爱尔兰标准时间”、“伊朗标准时间”、“印度标准时间”或“以色列标准时间”。您不应该依赖解析,而应该使用 zoneinfo 时区。
【讨论】:
以上是关于使用 pytz 时区时 Python 日期时间不包括 DST的主要内容,如果未能解决你的问题,请参考以下文章
python 使用`pytz`将时间和日期对话转换为其他时区。