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)
来解决这个明显的错误。
那么,这是一个错误吗?我做错了吗?或者是否打算在添加时间后刷新代码?
答案 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()
方法来纠正此问题。