4

请注意:

C:\dev\poc\SDR>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>)
>>>

这是我不明白的。US/Pacific ( tz1) 和 America/Los_Angeles ( tz2) 应该表示相同的时区,不是吗?datetime.astimezone那么,从一个区域移动到另一个区域的呼唤怎么会改变时间呢?

谢谢。

4

1 回答 1

4

夏令时。请注意,最后两个条目是 Listing PDT-1

astimezone考虑到 DST,但前提是它实际上经过了完整的逻辑。

您的示例中的前两个astimezone调用没有经过完整的逻辑,因为它们短路(因为它们转换“到”的时区已经与它们转换“从”的时区匹配)。

(You might wonder why the initial datetimes aren't using PDT already. This is because the datetime constructor doesn't take into account daylight savings time, even if you pass it a timezone - it just sets the timezone blindly.)

于 2012-04-09T22:43:55.350 回答