【问题标题】:Python datetime difference between .localize and tzinfo.localize 和 tzinfo 之间的 Python 日期时间差异
【发布时间】: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

差异的原因是什么,我应该使用哪个来本地化日期时间?

【问题讨论】:

标签: python datetime timezone pytz


【解决方案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 是的,是的。
猜你喜欢
  • 1970-01-01
  • 2012-02-04
  • 2012-06-26
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2021-01-23
相关资源
最近更新 更多