13

ここで何が起こっているのかを理解するのを手伝ってくれる人はいますか?

import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"

私の理解ではlocalize()、pytz タイムゾーン オブジェクトのメソッドは単純な datetime オブジェクトを取り、tzinfoローカリゼーションを実行するタイムゾーン オブジェクトに一致するプロパティを追加します。この場合、それは起こっていないようです。

明らかに、タイムゾーンについて、または pytz がタイムゾーンを処理する方法について、私が誤解しているものがあります。誰でも説明できますか?

4

1 に答える 1

13

それら同じタイムゾーンです - "Europe/Berlin"

それらを印刷すると、出力にはその特定の時点で適用される略語とオフセットが含まれます。

tz データ ソースを調べると、次のことがわかります。

# Zone  NAME            GMTOFF   RULES       FORMAT   [UNTIL]
Zone    Europe/Berlin   0:53:28  -           LMT      1893 Apr
                        1:00     C-Eur       CE%sT    1945 May 24 2:00
                        1:00     SovietZone  CE%sT    1946
                        1:00     Germany     CE%sT    1980
                        1:00     EU          CE%sT

そのため、タイム ゾーンが日時をローカライズしていない場合は、最初のエントリのみが使用されるように見えます。

また、pytz は元のローカル平均時偏差から余分な 28 秒を保持していないように見えますが、1893 年 4 月より前のベルリンの日付で作業していない限り、それは問題ではありません。

于 2014-06-23T16:14:47.493 に答える