python
のタイムゾーンデータベースモジュールのpytz
のlocalize()
について
pytzのlocalize
localize
はdatetime.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で保存しておくべきだろう。
必要に応じて都度変換する方が混乱が少ない。