こんばんは、エンジニアの眠れない夜です。
Djangoには django.utils.timezonという便利なクラスが用意されています。
このクラスを利用するとSettingsで指定されているローカルタイムを簡単に取得することができます。
[Django] settings.pyの設定
Settings.py に下記のコードを追加します。(日本向けのサービスを想定しています。)
TIME_ZONE = 'Asia/Tokyo'
USE_TZ = True
TIME_ZONE = 'Asia/Tokyo'
で日本時間が指定されます。
USE_TZ = True
でタイムゾーンを反映した時間の取得が有効になります。
Django モデルの設定
続いてモデルです。
from django.utils import timezone class Log(models.Model): regist_date = models.DateTimeField(default=timezone.now)
from django.utils import timezone
をインポートしてdefault=timezone.now
これでレコード登録時の日本時間が保存されます。
migrationsを見るとDateTimeFieldにdjango.utils.timezone.nowが設定されていることが分かります。
field=models.DateTimeField(default=django.utils.timezone.now),
データベースの中を覗いてみると標準時で保存されているように見えますが、adminページやViewを作成して表示するとここ
(TIME_ZONE = 'Asia/Tokyo'
)で設定した時間で表示されます。
Viewで日本時間(ローカルタイム)を利用する方法は?
from django.utils import timezone timezone.datetime.now() # 現在の日時 timezone.datetime.today() #今日の日付 timezone.datetime.now() - timezone.timedelta(days=1) # 1日前
こんな感じで現在時間、日付、日付の足し算、引き算ができます。
先程のモデルの指定ではtimezone.now
でしたがViewではtimezone.datetime.now()
を使います。似ているけど少し違うので注意してください。
日付の足し算引き算はtimezone.timedelta(days=1)
を使えば簡単にできるので日付の計算がすごく苦手な私としてはすごくありがたいです。
Javaで日付の計算をするときに比べると格段に楽です。
タイムゾーンを日本時間に固定したい場合
タイムゾーンなんて意識したくない!
データベースは日本時間で、表示も日本時間がいい!
そんな人はタイムゾーンをAsia/Tokyo
にしてUSE_TZ
をFalse
にしましょう。
TIME_ZONE = 'Asia/Tokyo'
USE_TZ = False
※ この設定はもし、タイムゾーンを使う必要が出てきた時に変換が必要になるので、そういう可能性がある場合はタイムゾーンを有効にしておいたほうが無難です。
コメントを残す