在python中切换时区时出现不一致

时间:2010-08-23 19:42:16

标签: python

我有一个像这样创建的日期时间对象:

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

1 个答案:

答案 0 :(得分:2)

是的,这就是为什么当.astimezone 时区时使用.replace而非datetime的原因。使用.astimezone可为时区提供调整夏令时等内容的机会。 使用.replace来提供一个天真的datetime tzinfo个对象。