我正在阅读不那么完整的 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),则无需使用标准化。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top