Django: 日時処理(timezone の活用)

Django 4 の実践(データ処理編)

日付:2025年2月19日

はじめに

Django では django.utils.timezone モジュールを活用して、タイムゾーンを考慮した日時の処理が可能です。

この記事で学べること

  • Django の timezone モジュールの基本
  • 現在時刻の取得とフォーマット変換
  • タイムゾーンの変更方法
  • UTC からローカルタイムへの変換

1. timezone モジュールの基本

Django では timezone モジュールを利用することで、タイムゾーンを考慮した日時処理を行えます。

現在時刻の取得

PYTHON
from django.utils import timezone now = timezone.now() print(now) # 出力例: 2025-02-19 12:00:00+00:00(UTC)

デフォルトでは USE_TZ = True の設定が有効になっており、UTC で現在時刻が取得 されます。

ローカルタイム(日本時間)への変換

PYTHON
from django.utils.timezone import localtime japan_time = localtime(now) print(japan_time) # 出力例: 2025-02-19 21:00:00+09:00(JST)

localtime() を使用すると、プロジェクトで設定した TIME_ZONE (Asia/Tokyo など) に基づいて変換されます。

2. タイムゾーンの変更

ユーザーごとに異なるタイムゾーンを適用する場合、timezone.activate() を使用します。

PYTHON
from django.utils.timezone import activate import pytz activate(pytz.timezone('America/New_York')) print(localtime(timezone.now())) # 出力例: 2025-02-19 07:00:00-05:00(EST)

この方法を使えば、特定のリクエストの間だけ異なるタイムゾーンを適用 できます。

3. タイムゾーン付きの日時を扱う

Django では timezone.make_aware() を使うことで、タイムゾーン情報のない datetime オブジェクトを aware datetime に変換 できます。

PYTHON
from django.utils.timezone import make_aware from datetime import datetime import pytz naive_dt = datetime(2025, 2, 19, 15, 0, 0) # タイムゾーンなし aware_dt = make_aware(naive_dt, timezone=pytz.timezone('Asia/Tokyo')) print(aware_dt) # 出力例: 2025-02-19 15:00:00+09:00

また、make_naive() を使用すると UTC ベースの aware datetime をローカルタイムに変換できます。

PYTHON
from django.utils.timezone import make_naive naive_local_dt = make_naive(aware_dt, timezone=pytz.timezone('Asia/Tokyo')) print(naive_local_dt) # 出力例: 2025-02-19 15:00:00

4. フォーマットの変換

Django では strftime() を使用して日時のフォーマットを変更できます。

PYTHON
date_str = aware_dt.strftime('%Y/%m/%d %H:%M:%S') print(date_str) # 出力例: 2025/02/19 15:00:00

また、文字列を datetime に変換するには strptime() を使用します。

PYTHON
from datetime import datetime parsed_date = datetime.strptime('2025/02/19 15:00:00', '%Y/%m/%d %H:%M:%S') print(parsed_date) # 出力例: 2025-02-19 15:00:00

5. まとめ

関数説明
timezone.now()UTC の現在時刻を取得
localtime()ローカルタイムに変換
timezone.activate()特定のタイムゾーンを適用
make_aware()naive datetime を aware に変換
make_naive()aware datetime を naive に変換
strftime()datetime を文字列に変換
strptime()文字列を datetime に変換

Django の timezone モジュールを活用すると、タイムゾーンを考慮した正確な日時処理 が可能になります。
特に、国際対応のアプリでは USE_TZ = True を推奨します。