タイムゾーン情報のない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()
を使用すると、historical代わりにオフセットが使用されます。 tz.localize()
は、指定された日付に対して有効な正しいオフセットを選択します。たとえば、米国東部時間帯のDSTの開始日と終了日は、時間の経過とともに変更されています。
夏時間から冬時間への移行期間またはその逆の期間にまたがるためにあいまいな日時値をローカライズしようとすると、タイムゾーンが参照され、結果の日時オブジェクトに.dst()
がTrueを返すかどうかが確認されますまたはFalse。 .localize()
の_is_dst
_キーワード引数を使用して、タイムゾーンのデフォルトをオーバーライドできます。
_dt = tz.localize(naive, is_dst=True)
_
または、_is_dst=None
_を設定して選択を完全にオフにします。その場合、またはまれに、タイムゾーンにデフォルト値が設定されていないis、あいまいなdatetime値はAmbiguousTimeError
になります例外が発生します。 _is_dst
_フラグは、あいまいな日時値についてのみ参照され、それ以外の場合は無視されます。
別の方法に戻るには、タイムゾーン対応オブジェクトを単純なオブジェクトに戻し、.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
インスタンスを修正しようとしています。この間違ったタイムゾーンを認識させます(おそらく、後で正しい値にローカライズして、 ()比較する他の時間に一致します(おそらく時計)time
インスタンス([〜#〜] not [〜#〜] a datetime
)に「タグ付け」したいので、その属性は、後で完全なdatetime
インスタンスを形成するために使用できます。