这是预期的行为还是datetime timedelta中的错误?

时间:2015-05-13 22:29:29

标签: datetime python-3.x pytz

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>)

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

您可以在添加小时后执行astimezone(ppt)来解决这个明显的错误。

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

1 个答案:

答案 0 :(得分:2)

在进行日期时间算术时,您需要再次使用timezone对象调用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()方法来纠正此问题。