我正在阅读不那么完整的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
,有人请给我一个示例(如上所述),结果会有所不同。
由于
答案 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),则无需使用标准化。
如果您不使用它,在某些情况下,您的转换可能会减少一小时。