24

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

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

>>> 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に試してみましたが、まったく同じでした。私の意見では、この例は、異なるタイムゾーンのオブジェクト間で変換するときに使用する必要がある理由を実際には説明していません。normalizedatetime

を使用しないと結果が異なる(上記のような)を教えてくださいnormalize

ありがとう

4

2 に答える 2

12

ピッツのドキュメントから:

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

于 2009-09-14T17:26:38.220 に答える
6

ドキュメントによると、正規化は DST の問題の回避策として使用されます。

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

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

これを使用しないと、特定の状況下でコンバージョンが 1 時間遅れる可能性があります。

于 2009-09-14T17:27:59.883 に答える