[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型なのに、タイムゾーン情報がないと怒られれている。

よかったらシェアしてね!
  • URLをコピーしました!
目次