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。