[Django] ModelのDatatimeにtimzezoneでデータを挿入する時はdjango.utils.timezoneを使う
Pythonのdatatimeにはnativeとawareが存在
- nativeはタイムゾーンを持たない datetime
- awareはタイムゾーンを持つ datetime
- ベストプラクティスはaware にしてシステムごとにタイムゾーンに変換
django.utls.timezone を使用する
django.utls.timezoneを使用することでDjangoのUTCおよびLOCALTIMEは簡単に取得できる。
from django.utils import timezone
now_utc = timezone.now() # UTL
now_local = timezone.localtime() #LOCALTIME
デフォルトdatetimeパッケージにはないのでpytz
デフォルトパッケージにはタイムゾーンを利用する場合は継承させる必要がある。
pytz というものがあるので便利。
import datetime as st
import pytz
now_utc = dt.datetime.now(pytz.timezone('UTC')) # UTC
local_utc = now_utc.astimezone(pytz.timezone('Asia/Tokyo')) # LOCAL TIME
RuntimeWarning: DateTimeField ItemList.created received a naive datetime
要はタイムゾーンが必要なDatatime型なのに、タイムゾーン情報がないと怒られれている。