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

Is this intended behavior or a bug in datetime timedelta?

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

returns datetime.datetime(2013, 3, 10, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)

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

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

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

您需要在进行日期时间运算时再次使用时区对象调用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:

In addition, if you perform date arithmetic on local times that cross DST boundaries, the result may be in an incorrect timezone. A normalize() method is provided to correct this.