けっこう何回もミスってしまうのでメモ。
settings
TIME_ZONE = 'Asia/Tokyo'
USE_TZ = True
from django.utils import timezone
now = timezone.now()
この now は、repr してみると
datetime.datetime(2017, 1, 26, 4, 4, 56, 53007, tzinfo=<UTC>)
UTC の datetime.
これはテンプレートで表示するとローカルタイムに直されるので、JST のように見える。が、見る瞬間に変換されているだけで、タイムゾーンはUTC。
これを、
now.date()
なんかで date を取り出して、MySQL の(JSTで格納されている)日付フィールドと比較すると、9時間ずれておかしなことになる。
なので、date を使いたいとか、Python コード内で strftime して使いたいとかの理由があれば、
from django.utils import timezone
now = timezone.localtime(timezone.now())
として localtime 化しておけば、
datetime.datetime(2017, 1, 26, 13, 4, 56, 53007, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
このように JST のタイムゾーンがついた datetime になるので使い勝手が良い。
コメント