pytz:タイムゾーン間で変換するときにノーマライズが必要なのはなぜですか?

StackOverflow https://stackoverflow.com/questions/1422880

  •  07-07-2019
  •  | 
  •  

質問

あまり完全ではない pytzのドキュメントを読んでいますが、その一部を理解するのにこだわっています。

  

タイムゾーン間の変換も特別な注意が必要です。また、変換が正しいことを確認するためにnormalizeメソッドを使用する必要があります。

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

normalize を使用して、なしでこの例を試しましたが、まったく同じことがわかりました。私の意見では、この例では、異なるタイムゾーンの datetime オブジェクト間で変換するときに normalize を使用する必要があるなぜを説明していません。

normalize を使用しない場合に結果が異なる(上記のものなど)を教えてください。

ありがとう

役に立ちましたか?

解決

pytzドキュメントから:

  

さらに、DSTの境界を越える現地時間で日付計算を実行すると、結果が誤ったタイムゾーンになる可能性があります(つまり、2002-10-27 1:00 ESTから1分を差し引くと2002-10-正しい2002-10-27 1:59 EDTではなく27 0:59 EST)。これを修正するためにnormalize()メソッドが提供されています。残念ながら、これらの問題はPython datetime実装を変更しないと解決できません。

他のヒント

ドキュメントでは、DSTの問題の回避策としてノーマライズが使用されていると述べています。

  

さらに、DSTの境界を越える現地時間で日付計算を実行すると、結果が誤ったタイムゾーンになる可能性があります(つまり、2002-10-27 1:00 ESTから1分を差し引くと2002-10-正しい2002-10-27 1:59 EDTではなく27 0:59 EST)。これを修正するためにnormalize()メソッドが提供されています。

したがって、DSTに関連するいくつかのエッジケースを修正するために使用されます。 DSTタイムゾーン(UTCなど)を使用していない場合、ノーマライズを使用する必要はありません。

使用しない場合、特定の状況下でコンバージョンが1時間オフになる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top