Python:datetime.astimezone相对于美国/太平洋和美国/Los_Angeles时区的奇怪行为



请注意:

C:devpocSDR>python
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pytz import timezone
>>> from datetime import datetime
>>> tz1=timezone('America/Los_Angeles')
>>> tz2=timezone('US/Pacific')
>>> ts1=datetime(2011,8,1,tzinfo=tz1)
>>> ts2=datetime(2011,8,1,tzinfo=tz2)
>>> ts1
datetime.datetime(2011, 8, 1, 0, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
>>> ts2
datetime.datetime(2011, 8, 1, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)
>>> ts1.astimezone(tz1)
datetime.datetime(2011, 8, 1, 0, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
>>> ts2.astimezone(tz2)
datetime.datetime(2011, 8, 1, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)
>>> ts1.astimezone(tz2)
datetime.datetime(2011, 8, 1, 1, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
>>> ts2.astimezone(tz1)
datetime.datetime(2011, 8, 1, 1, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)
>>>

这是我不明白的。美国/太平洋(tz1)和美国/Los_Angeles(tz2)应该表示相同的时区,不是吗?那么,为什么datetime.astimezone被要求从一个区域移动到另一个区域会改变时间呢?

谢谢。

令时。请注意,最后两个条目PDT-1列出。

astimezone考虑了

DST,但前提是它实际上通过其完整逻辑。

示例中的前两个astimezone调用不会通过完整的逻辑,因为它们会短路(因为它们要转换"到"的时区已经与它们要转换"从"的时区匹配)。

(您可能想知道为什么初始日期时间尚未使用 PDT。这是因为 datetime 构造函数不考虑夏令时,即使您为它传递时区 - 它只是盲目设置时区。

相关内容

  • 没有找到相关文章

最新更新