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'
我尝试了这个例子,没有使用标准化
,结果是一样的。在我看来,这个例子并没有真正解释为什么我们在不同时区的datetime
对象之间进行转换时必须使用normalize
。
请有人给我一个示例(如上面的示例),其中不使用标准化
时结果会有所不同。
谢谢
I'm reading the not so complete pytz documentation and I'm stuck on understand one part of it.
Converting between timezones also needs special attention. This also needs to use the normalize method to ensure the conversion is correct.
>>> 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'
I tried this very example without using normalize
and it turned out just the same. In my opinion this example doesn't really explain why we have to use normalize
when converting between datetime
objects in different timezones.
Would someone please give me an example (like the one above) where the result differs when not using normalize
.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
来自 pytz 文档:
From the pytz documentation:
文档说,标准化被用作 DST 问题的解决方法:
因此它用于纠正一些涉及 DST 的边缘情况。如果您不使用 DST 时区(例如 UTC),则无需使用标准化。
如果您不使用它,在某些情况下您的转化可能会延迟一小时。
The docs say that normalize is used as a workaround for DST issues:
So it's used to correct some edge cases involving DST. If you're not using DST timezones (e.g. UTC) then it's not necessary to use normalize.
If you don't use it your conversion could potentially be one hour off under certain circumstances.