Python|UTCを日本時間(JST)に変換する

1. はじめに

Pythonで日時や時刻を扱う場面は多くありますが、UTC(協定世界時)を日本時間(JST)に変換する処理は特に実務で頻出します。たとえば、サーバーログがUTCで記録されている場合や、APIのレスポンスがUTCで返ってくる場合、これをJSTに変換する必要があります。

本記事では、Python初心者〜中級者の方向けに、UTCからJSTへ時刻を変換する方法を、具体的なコードとともに丁寧に解説します。

 

2. PythonでのUTCとJSTの扱い方

UTCとは?JSTとは?

UTC(Coordinated Universal Time)は、世界共通の基準時間です。一方、日本標準時(JST)はUTCに+9時間したものです。Pythonでは、標準ライブラリの datetimetimezone、そしてサードパーティの pytz を使って、これらの変換が可能です。

基本的な変換の流れ

UTC → JST の変換は以下の流れで行います:

  1. UTCのdatetimeオブジェクトを用意
  2. JSTのタイムゾーンを指定
  3. astimezone()で変換
from datetime import datetime, timezone, timedelta

# 現在時刻(UTC)を取得
utc_now = datetime.now(timezone.utc)

# JSTのタイムゾーン(UTC+9)
jst = timezone(timedelta(hours=9))

# JSTに変換
jst_now = utc_now.astimezone(jst)

print("UTC:", utc_now)
print("JST:", jst_now)

実行結果:

UTC: 2025-07-27 06:32:00+00:00
JST: 2025-07-27 15:32:00+09:00

このように、datetime.now(timezone.utc)でUTCの現在時刻を取得し、astimezone()でJSTに変換できます。

 

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

APIのタイムスタンプ(UTC)をJSTに変換する

多くのWeb APIは、レスポンスのタイムスタンプをUTCで返します。これをユーザー向けに表示する際、JSTに変換する必要があります。

以下はISO8601形式のUTC文字列をJSTに変換する例です:

from datetime import datetime, timezone, timedelta

# UTCの文字列(ISO8601形式)
utc_str = "2025-07-27T06:00:00+00:00"

# 文字列をdatetimeに変換
utc_dt = datetime.fromisoformat(utc_str)

# JSTのタイムゾーンを定義
jst = timezone(timedelta(hours=9))

# JSTに変換
jst_dt = utc_dt.astimezone(jst)

print("JST変換後:", jst_dt.strftime("%Y-%m-%d %H:%M:%S"))

実行結果:

JST変換後: 2025-07-27 15:00:00

pytzを使った変換方法

pytzライブラリを使えば、より厳密なタイムゾーン処理が可能です。特にサマータイムのある地域の対応や、タイムゾーン文字列による指定に便利です。

from datetime import datetime
import pytz

# UTCの現在時刻を取得
utc_now = datetime.now(pytz.utc)

# JSTのタイムゾーンを指定
jst = pytz.timezone("Asia/Tokyo")

# JSTに変換
jst_now = utc_now.astimezone(jst)

print("UTC:", utc_now)
print("JST:", jst_now)

実行結果:

UTC: 2025-07-27 06:32:00+00:00
JST: 2025-07-27 15:32:00+09:00

この方法では、Asia/Tokyo というわかりやすい文字列でタイムゾーンを指定できます。

 

4. 注意点・エラー対策

タイムゾーン情報の欠落に注意

datetimeオブジェクトにタイムゾーン情報(tzinfo)がない場合、astimezone()でエラーは出ませんが、意図しない変換になることがあります。必ずUTCやJSTなどのtzinfoを設定したうえで使いましょう。

pytzを使う場合のローカル化に注意

pytzを使うときに、localize()を使わずにtzinfoを直接代入すると、サマータイムなどが正しく反映されません。

# 正しい方法(pytz)
from datetime import datetime
import pytz

utc = pytz.utc
dt_naive = datetime(2025, 7, 27, 6, 0, 0)  # tzなし
dt_aware = utc.localize(dt_naive)  # 正しくローカル化

上記のようにlocalize()を使うのが安全です。

 

5. まとめ

今回は、PythonでUTCを日本時間(JST)に変換する方法について、標準ライブラリとpytzの両方を用いた手法を紹介しました。

UTCとJSTの変換は、API連携・ログ分析・通知処理など、実務で非常に頻繁に使います。ぜひ本記事のコードを参考に、自分のプロジェクトに応用してみてください。

学習のコツ: タイムゾーンの処理は一見難しそうに見えますが、timezonepytzの使い方に慣れればすぐに理解できるようになります。まずは簡単な変換処理から始め、段階的に学びましょう。

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