规范化日期时间对象

时间:2014-12-03 04:58:22

标签: python datetime pytz

我正在做一些日期时间的魔术并试图弄清楚为什么时间稍微偏离。

2014年6月3日中午3点,UTC:

>>> chicago = pytz.timezone('US/Central')
>>> chicago.localize(datetime(2014,6,3,15,0,0)).astimezone(pytz.utc)
datetime.datetime(2014, 6, 3, 20, 0, tzinfo=<UTC>)

2014年12月2日中午3点UTC:

>>> chicago.localize(datetime(2014,12,2,15,0,0)).astimezone(pytz.utc)
datetime.datetime(2014, 12, 2, 21, 0, tzinfo=<UTC>)

第二个例子中的小时是21而不是第一个例子中的20小时。我想也许日期没有正常化,所以我尝试了这个:

>>> chicago.normalize(chicago.localize(datetime(2014,12,2,15,0,0))).astimezone(pytz.utc)
datetime.datetime(2014, 12, 2, 21, 0, tzinfo=<UTC>)

它仍然是21.这里发生了什么?

1 个答案:

答案 0 :(得分:2)

夏令时。

在第一个案例(6月3日),芝加哥正处于中央夏令时期间。 UTC的偏移量是五个小时。

>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> clt=chicago.localize(datetime(2014,6,3,15,0,0))
>>> clt.strftime(fmt)
'2014-06-03 15:00:00 CDT-0500'
                     ^^^^^^^^

在第二个案例(12月2日)中,芝加哥处于中央标准时间。 UTC的偏移量是六个小时。

>>> clt=chicago.localize(datetime(2014,12,2,15,0,0))
>>> clt.strftime(fmt)
'2014-12-02 15:00:00 CST-0600'
                     ^^^^^^^^

您拨打normalize()的电话对此没有帮助,因为您没有在跨越DST边界的当地时间进行日期或时间算术。