请观察:
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
如何调用从一个区域移动到另一个区域会如何改变小时?
感谢。
答案 0 :(得分:4)
夏令时。请注意,最后两个条目列出了PDT-1
。
astimezone
考虑了DST,但前提是它实际上完全符合逻辑。
示例中的前两个astimezone
调用不完成逻辑,因为它们会短路(因为它们正在转换的时区&# 34; to&#34;已经匹配他们正在转换&#34;来自&#34;)。
(您可能想知道为什么初始日期时间已经不是使用PDT了。这是因为datetime
构造函数doesn't take into account daylight savings time,即使您将其传递给时区 - 它只是盲目地设置时区。)