我对下面的行为有点疑惑。假设我使用 datetime.combine()
构建时区感知对象:
>>> date
datetime.date(2018, 10, 17)
>>> time
datetime.time(6, 0)
>>> tz
<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
>>> datetime.combine(date, time, tzinfo=tz)
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>)
或者我使用 pytz.localize()
做同样的事情:
>>> tz.localize(datetime.combine(date, time))
datetime.datetime(2018, 10, 17, 6, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)
请注意 tzinfo
的时区名称和偏移量已更改。我无法找到该行为的适当文档。 pytz
文档说
Unfortunately using the tzinfo argument of the standard datetime constructors “does not work” with pytz for many timezones.
最佳答案
您刚刚(再次)发现在创建时区感知日期时间时永远不应该直接添加时区信息。始终使用 tz.localize()
。
您看到的问题是因为 datetime.combine
没有将 tzinfo
对象调整为实际的日期时间。它仍然采用该时区中第一个有效日期的时区信息,该日期是在 1800 年代后期,恰好与 UTC 相差 0:53:00
。
关于python - datetime.combine() 和 pytz.localize() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733868/