2015-05-13 32 views
0
from datetime import datetime timedelta 
import pytz 

ppt = pytz.timezone('US/Pacific') 
first = ppt.localize(datetime(2013, 3, 10, 0, 0, 0)) 
first+=timedelta(hours=2) 
first 

回报datetime.datetime(2013, 3, 10, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)这是预期的行为还是日期时间timedelta中的错误?

它应该返回datetime.datetime(2013, 3, 10, 3, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

您可以通过添加小时后做astimezone(ppt)解决此,显然,错误。

那么,这是一个错误?我做错了吗?或者它是否打算在添加时间后更新代码?

回答

2

您需要再次使用时区对象调用normalize()做日期时间算术时:

>>> first 
datetime.datetime(2013, 3, 10, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>) 
>>> ppt.normalize(first) 
datetime.datetime(2013, 3, 10, 3, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>) 

如前所述in the docs

此外,如果执行本地时间跨越DST日期计算边界,结果可能在不正确的时区。提供了一个normalize()方法来解决这个问题。

+0

嗯,我猜想错过了那部分文档。谢谢。 –

相关问题