.localize 和 tzinfo 之间的 Python 日期时间差异
Posted
技术标签:
【中文标题】.localize 和 tzinfo 之间的 Python 日期时间差异【英文标题】:Python datetime difference between .localize and tzinfo 【发布时间】:2017-01-20 11:26:51 【问题描述】:为什么这两行会产生不同的结果?
>>> import pytz
>>> from datetime import datetime
>>> local_tz = pytz.timezone("America/Los_Angeles")
>>> d1 = local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0)) # line 1
>>> d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz) # line 2
>>> d1 == d2
False
差异的原因是什么,我应该使用哪个来本地化日期时间?
【问题讨论】:
见this explanation。 【参考方案1】:当您创建 d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
时,它无法正确处理夏令时 (DST)。 local_tz.localize()
会。
d1
是
>>> local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0))
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>
)
d2
是
>>> datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>
)
您可以看到它们代表的时间不同。
d2
如果您要使用 UTC,则方法很好。 UTC 没有要处理的夏令时 (DST) 转换。
处理时区的正确方法是使用local_tz.localize()
来支持夏令时(DST)
更多信息和其他示例可以在这里找到:http://pytz.sourceforge.net/#localized-times-and-date-arithmetic
【讨论】:
那么 d1 是更合适、更正确的时间本地化方式吗? @Nick 是的,是的。以上是关于.localize 和 tzinfo 之间的 Python 日期时间差异的主要内容,如果未能解决你的问题,请参考以下文章
为啥 pytz localize() 不生成一个 tzinfo 与本地化它的 tz 对象匹配的 datetime 对象?
为啥 tzinfo 会在 python 中打破创建纪元时间?
python: 为啥 datetime.now() 的 tzinfo 没有? [复制]
datetime.now(tz) 和 datetime(year, month, day, tzinfo=tz) 没有相同的 UTC 偏移量