4
請注意以下幾點:Python:關於美國/太平洋和美洲/洛杉磯時區的datetime.astimezone的奇怪行爲?
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>)
>>>
這是我不明白。美國/太平洋(tz1
)和美國/洛杉磯(tz2
)應該表示同一時區,不是嗎?那麼如何調用datetime.astimezone
從一個區域移動到另一個區域?
謝謝。
如果你看一下打印,你也可以看到16:00:00 STD和17:00:00 DST。 – Zanson 2012-04-09 23:40:18
謝謝。您如何建議在給定天真時間值和時區的情況下構建日期時間對象? – mark 2012-04-10 05:55:41
@mark - 如鏈接頁面中提到的,要將樸素的'datetime'轉換爲本地化的,使用時區對象的'.localize()'方法。 (基本上,在不傳遞'tzinfo'的情況下構造'datetime'對象,然後使用'pytz'中的時區對象來定位它。) – Amber 2012-04-10 06:08:24