[Django] 表示される時間とDB登録時間の設定

UbuntuとMySQLとDjangoの時間の設定についてです。

Ubuntuのタイムゾーン確認

ターミナルから $ timedatectl コマンドで時間を確認してみます。

$ timedatectl
               Local time: Sat 2024-03-02 07:18:01 UTC
           Universal time: Sat 2024-03-02 07:18:01 UTC
                 RTC time: Sat 2024-03-02 07:18:01
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

サーバーのタイムゾーンを「Asia/Tokyo」にします。

sudo timedatectl set-timezone Asia/Tokyo

再度確認します。

$ timedatectl
               Local time: Sat 2024-03-02 16:57:24 JST
           Universal time: Sat 2024-03-02 07:57:24 UTC
                 RTC time: Sat 2024-03-02 07:57:23
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Djangonoタイムゾーン確認

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_L10N = True

USE_TZ = True

TIME_ZONEは 「Asia/Tokyo」になっていますが、Djangoのtimezone.now()でMySQLにデータを登録してみると「Etc/UTC (UTC, +0000)」の時刻になってしまいます。

この状態だとDjango上での表記は日本時間になりますが、DBに登録される値はUTCになるそうです。

DBも日本時間にしたい場合は上記「 setting.py」 の「USE_TZ = True」を「USE_TZ = False」に変更します。これで完全日本時間環境の出来上がりです。



Author: webmaster