pytz:为什么在时区之间转换时需要规范化?
题
我正在阅读不那么完整的 pytz文档,我仍然坚持理解其中的一部分
时区之间的转换也需要特别注意。这也需要使用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
尝试了这个非常 在我看来,这个例子并没有真正解释为什么我们必须在不同时区的 datetime
对象之间进行转换时使用 normalize
。
有人请给我一个示例(如上所述),当不使用 normalize
时,结果会有所不同。
由于
解决方案
来自pytz文档:
此外,如果您在跨越DST边界的当地时间执行日期算术,结果可能是在一个不正确的时区(即从2002-10-27 1:00 EST减去1分钟,你得到2002-10- 27 0:59 EST而不是正确的2002-10-27 1:59 EDT)。提供了normalize()方法来纠正这个问题。不幸的是,如果不修改Python日期时间实现,就无法解决这些问题。
其他提示
文档说规范化用作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),则无需使用标准化。
如果您不使用它,在某些情况下,您的转换可能会减少一小时。
不隶属于 StackOverflow