django.utils.timezone.now()の挙動を整理
はじめに
- Djangoで用意されている
django.utils.timezone.now()の挙動はUSE_TZの設定によって挙動が変わる - 整理したいと思い、備忘録としてまとめておく
前提
本題
USE_TZ = Trueの時
出力
>>> from django.utils import timezone >>> print(timezone.now()) 2025-04-27 22:45:28.485428+00:00- テンプレート
views.py
from django.shortcuts import render from django.utils import timezone def timezone_test(request): now = timezone.now() return render(request, 'timezone.html', {'value': now})timezone.html
{% load tz %} <div> {% localtime on %} <p>localtime on {{ value }}</p> {% endlocaltime %} {% localtime off %} <p>localtime off {{ value }}</p> {% endlocaltime %} <p>{{ value }}</p> </div>- レンダリング
USE_TZ = Falseの時
出力
>>> from django.utils import timezone >>> timezone_now = timezone.now() >>> print(timezone_now) 2025-04-28 07:14:47.608404- テンプレート
- views.pyとtimezone.htmlは同じ
- レンダリング
localtimeの使用に関係なく常にローカルタイムが返されている
まとめ
| USE_TZ | timezone.now()の出力 |
テンプレートでの表示 | 備考 |
|---|---|---|---|
| True | UTC(aware) | デフォルト or カレントタイムゾーン(変換) | activate()に注意 |
| False | ローカルタイム(naive) | そのまま表示(変換なし) |