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」に変更します。これで完全日本時間環境の出来上がりです。