2014-12-03 69 views
3

我正在做一些日期时间的魔法,并试图找出为什么时间稍微关闭。标准化日期时间对象

下午3点中心6月3日2014 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>) 

下午3点中心12月2日2014 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

夏令时。

在第一种情况(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边界。