djangoの時間まわり

以前に、djangoのコードからローカライズされた時間を取得する方法をやったけど、それを含めて整理する。

まず、プロジェクトを立ち上げた時、時間まわりの設定は、

TIME_ZONE = 'UTC'
USE_TZ = True

になっている。

djangoのコード内で、日付時間を取得する場合は、以下の二つ?

  • datetimeモジュール
  • django.utils.timezoneモジュール

この状態で、とりあえず今日の日付と時間を取るならば、

>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2019, 3, 13, 19, 45, 1, 21127, tzinfo=<UTC>)
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2019, 3, 13, 19, 45, 15, 660571)

になる。この場合は、TIME_ZONEとUSE_TZの影響で同じ出力になった。

次に、

TIME_ZONE = 'Asia/Tokyo'

に変えると

>>> from django.utils import timezone
>>> print(timezone.now())
2019-03-13 19:43:00.744599+00:00
>>> from datetime import datetime
>>> print(datetime.today())
2019-03-14 04:43:23.253193

datetimeモジュールだけTIME_ZONEの影響を受ける。

だから、基本的に、時間取得なら設定を変えてdatetimeモジュールを使用する?

じゃあ、timezoneは何に使うんだよっていう話になる。

これは、憶測だけど、憶測だけど、憶測だけど、テンプレートを通して取得した場合にのみ使用するのかもしれない。 上のは、manage.pyのshell。