datetime
タイムゾーン情報がない があります。タイムゾーン情報を取得していて、タイムゾーンを既存の datetime インスタンスに追加したいのですが、どうすればよいですか?
d = datetime.datetime.now()
tz = pytz.timezone('Asia/Taipei')
tz
タイムゾーン情報をdatetimeに追加する方法a
tz.localize(d)
インスタンスをローカライズするために使用します。ドキュメントから:
1 つ目は、pytz ライブラリによって提供される localize() メソッドを使用することです。これは、単純な日時 (タイムゾーン情報のない日時) をローカライズするために使用されます。
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) >>> print(loc_dt.strftime(fmt)) 2002-10-27 06:00:00 EST-0500
を使用せずtz.localize()
に を使用すると、代わりに履歴オフセットが使用されるdatetime.replace()
可能性があります。指定された日付に有効な正しいオフセットを選択します。たとえば、米国東部時間帯の DST の開始日と終了日は、時間の経過とともに変更されています。tz.localize()
夏時間から冬時間へ、またはその逆の移行期間にまたがっているためにあいまいな datetime 値をローカライズしようとすると、タイムゾーンが参照され、結果の datetime オブジェクトが.dst()
True または False を返す必要があるかどうかが確認されます。is_dst
キーワード引数 forを使用して、タイムゾーンのデフォルトをオーバーライドできます.localize()
。
dt = tz.localize(naive, is_dst=True)
または、設定して選択を完全にオフにすることもできますis_dst=None
。その場合、またはまれにタイムゾーンにデフォルトが設定されていない場合、あいまいな日時値によりAmbiguousTimeError
例外が発生します。フラグは、is_dst
あいまいな datetime 値に対してのみ参照され、それ以外の場合は無視されます。
逆に戻るには、タイムゾーン対応オブジェクトをナイーブ オブジェクトに戻します。次を使用します.replace(tzinfo=None)
。
naivedt = awaredt.replace(tzinfo=None)
元の日時が、追加しようとしているタイムゾーンで「測定」されていることがわかっている場合replace
は、localize
.
# d = datetime.datetime.now()
# tz = pytz.timezone('Asia/Taipei')
d = d.replace(tzinfo=tz)
これが理にかなっている場合が 2 回あると想像できます (2 回目は私に起こりました)。
datetime
おり、この間違ったタイムゾーンを認識させることでインスタンスを修正しようとしています (おそらく後で「正しい」タイムゾーンにローカライズして、now() の値が他の値と一致するようにします)あなたがそれを比較している時間(おそらくあなたの時計)time
インスタンス ( NOT a datetime
) にタイムゾーン (tzinfo) 属性を「タグ付け」して、後で属性を使用して完全なdatetime
インスタンスを形成できるようにします。