pytz:为什么在时区之间转换时需要规范化?

时间:2009-09-14 17:22:31

标签: python timezone pytz

我正在阅读不那么完整的pytz documentation,而且我一直在理解它的一部分。

  

时区之间的转换也需要特别注意。这也需要使用normalize方法来确保转换是正确的。

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

我使用normalize尝试了这个非常示例,结果与此相同。在我看来,这个例子并没有真正解释为什么我们在不同时区的normalize对象之间转换时必须使用datetime

如果不使用normalize,有人请给我一个示例(如上所述),结果会有所不同。

由于

2 个答案:

答案 0 :(得分:9)

来自pytz文档:

  

此外,如果您在跨越DST边界的当地时间执行日期算术,结果可能是在一个不正确的时区(即从2002-10-27 1:00 EST减去1分钟,你得到2002-10- 27 0:59 EST而不是正确的2002-10-27 1:59 EDT)。提供了normalize()方法来纠正这个问题。不幸的是,如果不修改Python日期时间实现,就无法解决这些问题。

答案 1 :(得分:6)

文档说规范化用作DST问题的解决方法:

  

此外,如果您在跨越DST边界的当地时间执行日期算术,结果可能是在一个不正确的时区(即从2002-10-27 1:00 EST减去1分钟,你得到2002-10- 27 0:59 EST而不是正确的2002-10-27 1:59 EDT)。提供了normalize()方法来纠正这个问题。

因此,它用于纠正涉及DST的一些边缘案例。如果您没有使用DST时区(例如UTC),则无需使用标准化。

如果您不使用它,在某些情况下,您的转换可能会减少一小时。