[Django]モデルmodels.DateTimeFieldに現在の時間を挿入する方法

Python文字列の日付を変換

こんばんは、エンジニアの眠れない夜です。

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_TZFalseにしましょう。

TIME_ZONE = 'Asia/Tokyo'

USE_TZ = False

※ この設定はもし、タイムゾーンを使う必要が出てきた時に変換が必要になるので、そういう可能性がある場合はタイムゾーンを有効にしておいたほうが無難です。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください