Python 3.6.3
Django 1.11.6
背景
Pythonのdatetime.datetimeはnaive(タイムゾーン情報を持っていない)とaware(タイムゾーン情報を持っている)の2種類に区別されます。
今回はタイトルの通り、タイムゾーンが東京になっていない箇所をどうやったらローカルタイムへ変換できるのかまとめました。
その場合、タイムゾーン情報をsettings.pyから参照して変換したい!という方には参考になるかと思います。
自分もハマったので忘備録として残します。
答え
# 動作確認していないので実用性は低いです
from django.utils import timezone
datetime.astimezone(tz=None)
Noneとするとタイムゾーン情報がなくなりsettings.pyのtimezone情報から参照して変換してくれます。
終わりに
Pythonのタイムゾーン変換でググるとその場でtzinfoに+9hしたものが多く、苦労しました。
それとPythonでのタイムゾーン変換はpytzが有名らしいですが、
Qiita記事
Python3のdatetimeはタイムゾーンを指定するだけで高速になる
上記の記事を見るとpytzは読み込みが遅いらしい。
pytzを使用せず、標準ライブラリのみでどうにかできないか試行錯誤した結果こうなりました。
参考
Pythonでdatetimeにtzinfoを付与するのにreplaceを使ってはいけない
Convert a python UTC datetime to a local datetime using only python standard library?