Python|タイムゾーン付きのdatetimeを扱う:pytzの使い方

1. はじめに

Pythonで日付や時刻を扱う場面は多くありますが、特に国際化対応やログの管理、スケジューリングといったシーンでは「タイムゾーン付きのdatetime」を正しく扱うことが重要になります。
本記事では、Pythonでタイムゾーンを扱うための定番ライブラリ「pytz」の使い方について、初心者にも分かりやすく解説します。

Python|タイムゾーン付きのdatetimeを扱う:pytzの使い方」というテーマで、基本的な使い方から、実務でよく使われる応用例、初心者がつまづきやすいポイントまで丁寧に紹介していきます。

 

2. Pythonでのタイムゾーン処理の基本とpytzの役割

2-1. datetimeモジュールのタイムゾーン対応

Python標準のdatetimeモジュールでは、tzinfoを使ってタイムゾーン付きの日時を扱うことができますが、そのままでは扱いがやや面倒です。
そこで便利なのが「pytz」という外部ライブラリです。

2-2. pytzとは

pytzは、世界中のタイムゾーン情報(IANAタイムゾーンデータベース)に対応したタイムゾーン処理ライブラリです。
これにより、タイムゾーンを指定した日時の変換やローカライズが簡単に行えます。

2-3. pytzのインストール

以下のコマンドでインストールできます:

pip install pytz

2-4. タイムゾーン付きの現在時刻を取得する

日本(Asia/Tokyo)の現在時刻を取得する例です。

from datetime import datetime
import pytz

# タイムゾーンを取得
tokyo = pytz.timezone('Asia/Tokyo')

# タイムゾーン付き現在時刻を取得
dt = datetime.now(tokyo)
print(dt)

実行結果:

2025-07-27 15:10:23.123456+09:00

+09:00のように、UTCからの差(オフセット)が付いているのが特徴です。

 

3. pytzのよくある使い方・応用例

3-1. UTC時刻を日本時間に変換する

グローバルなアプリでは、UTC(協定世界時)で保存されたデータを、ユーザーの現地時間に変換する処理が必要になります。

# UTCで保存された時刻(naiveなdatetime)
from datetime import datetime
import pytz

utc_time = datetime(2025, 7, 27, 6, 0, 0)

# UTCにローカライズ
utc = pytz.utc
utc_dt = utc.localize(utc_time)

# 日本時間に変換
tokyo = pytz.timezone('Asia/Tokyo')
jst_dt = utc_dt.astimezone(tokyo)

print(jst_dt)

実行結果:

2025-07-27 15:00:00+09:00

3-2. naiveなdatetimeをawareなdatetimeに変換する

Pythonのdatetimeオブジェクトには「naive(タイムゾーンなし)」と「aware(タイムゾーンあり)」の2種類があります。
pytz.localize()を使ってnaiveな日時にタイムゾーン情報を付加できます。

from datetime import datetime
import pytz

# タイムゾーンなしのdatetime
naive_dt = datetime(2025, 12, 25, 10, 0, 0)

# タイムゾーンを付与(東京時間)
tokyo = pytz.timezone('Asia/Tokyo')
aware_dt = tokyo.localize(naive_dt)

print(aware_dt)

実行結果:

2025-12-25 10:00:00+09:00

3-3. 利用可能なタイムゾーン一覧を取得する

対応しているタイムゾーン名を一覧表示できます。

import pytz

# 全タイムゾーン名を表示
for tz in pytz.all_timezones[:5]:
    print(tz)

実行結果:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara

 

4. タイムゾーン付きdatetimeの注意点・エラー対策

4-1. naiveとawareを混在させない

datetime同士の比較や演算で、naiveとawareを混ぜるとエラーになります。
常にローカライズしてから使うようにしましょう。

4-2. 夏時間(DST)に注意

一部地域では夏時間(DST)が導入されています。
pytzはこれにも対応していますが、datetimeをローカライズする際にis_dstを明示しないと例外が出ることがあります。

4-3. UTCベースの保存が安全

実務では、DB保存は常にUTCで統一し、表示時に変換するのが安全です。

 

5. まとめ

  • pytzを使えば、タイムゾーン付きのdatetimeを簡単に扱える
  • localize()astimezone()の使い方がポイント
  • 実務では「UTC保存→現地時間表示」が基本スタイル

Python初心者の方でも、pytzを使えば世界中の時間を正確に処理できるようになります。
スケジュール管理アプリ、ログ解析、グローバル対応Webアプリなど、様々な場面で活用できますので、ぜひ一度使ってみてください!

タイトルとURLをコピーしました