pytzのlocalizeとnormalizeを使い分ける

pythonのタイムゾーンデータベースモジュールのpytzlocalize()について

pytzのlocalize

localizedatetime.datetimeインスタンスにタームゾーンを付加できるもの。

pytz.timezone('asia/tokyo')などで作成したtimezoneインスタンスから呼び出すことができる。

付加するだけであり、渡したdatetime.datetimeインスタンスの日時を変更するものではないことは、把握しておくべきだと思う。

参考: pytz - World Timezone Definitions for Python — pytz 2014.10 documentation

日時も変更したいとき

localizeではなくて、normalizeを使っておけばいい。

例えば、timezone.normalize(datetime.utcnow())timezoneインスタンスに対応したタイムゾーンの現在時刻が得られる。

上記参考ページの引用:

before = loc_dt - timedelta(minutes=10)
before.strftime(fmt)
# '2002-10-27 00:50:00 EST-0500'
eastern.normalize(before).strftime(fmt)
# '2002-10-27 01:50:00 EDT-0400'  -> 時刻も置き換わっていることがわかる
after = eastern.normalize(before + timedelta(minutes=20))
after.strftime(fmt)
# '2002-10-27 01:10:00 EST-0500'

基本的にはUTC

もし日時を保存するならタイムゾーンを付加せずにUTCで保存しておくべきだろう。

必要に応じて都度変換する方が混乱が少ない。

タイトルとURLをコピーしました