我有一个像这样创建的日期时间对象:
tm = datetime.datetime.strptime('2010 Aug 04 14:15:16', '%Y %b %d %H:%M:%S')
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16)
然后我按照这样设置时区:
tm.replace(tzinfo=pytz.timezone('UTC'))
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<UTC>)
最后,我将时区更改为美国/太平洋地区:
>>> tm = tm.astimezone(pytz.timezone('US/Pacific'))
>>> tm
datetime.datetime(2010, 8, 4, 7, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
这是对的。但如果我要走向另一个方向:
>>> tm = tm.replace(tzinfo =pytz.timezone('US/Pacific'))
>>> tm
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)
如您所见,使用带有PST时区的replace()错误地认为它不是夏令时。因此,当我转换为UTC时,它会增加8小时而不是7小时。
为什么要这样做?我如何更改它以便它做我想要的(正确地实现DST)?
答案 0 :(得分:2)
是的,这就是为什么当.astimezone
时区时使用.replace
而非datetime
的原因。使用.astimezone
可为时区提供调整夏令时等内容的机会。 仅使用.replace
来提供一个天真的datetime
tzinfo
个对象。