首页 > 解决方案 > 手动构造日期时间对象时出现意外的时区偏移

问题描述

我在 Python 中手动构造一个 datetime 对象:

>>> import datetime
>>> import pytz
>>> dt = datetime.datetime(
...             2020, 4, 3, 12, 0, 0,
...             tzinfo=pytz.timezone('America/Chicago')
...         )
>>> str(dt)
'2020-04-03 12:00:00-05:51'
>>>

另一方面:

>>> naive = datetime.datetime(2020, 4, 3, 12, 0, 0,)
>>> pytz.timezone('America/Chicago').localize(naive)
datetime.datetime(2020, 4, 3, 12, 0, tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)
>>> dt = pytz.timezone('America/Chicago').localize(naive)
>>> str(dt)
'2020-04-03 12:00:00-05:00'
>>> 

为什么第一个代码片段中的时区偏移量为“-05:51”而第二个代码片段中的时区偏移量为“-05:00”。由于夏令时在 2020 年 4 月 3 日在美国/芝加哥有效,因此它们都应显示“-05:00”。

标签: pythondatetimetimezone

解决方案


您可以使用以下代码本地化日期时间:

dt = pytz.timezone('America/Chicago').localize(datetime.datetime(2020, 4, 3, 12, 0, 0))
str(dt)

输出是:

'2020-04-03 12:00:00-05:00'

推荐阅读