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

サマータイム。最後の 2 つのエントリがリストされていることに注意してくださいPDT-1

astimezoneDST を考慮しますが、実際に完全なロジックを通過する場合のみです。

あなたの例の最初の2つのastimezone呼び出しは、短絡しているため、完全なロジックを通過しません(「変換先」のタイムゾーンが「変換元」のタイムゾーンと既に一致しているため)。

(最初の日付時刻でまだ PDT が使用されていない理由を疑問に思うかもしれません。これは、datetimeコンストラクターにタイムゾーンを渡しても、サマータイムが考慮されていないためです。タイムゾーンを盲目的に設定するだけです。)

于 2012-04-09T22:43:55.350 に答える