Pythonで時間をISO 8601形式に変換する方法を完全ガイド!初心者でもわかる日時フォーマット入門
この記事で学べること
- ISO 8601とは何かを基礎から理解できる
- Pythonの
datetimeをISO 8601形式へ変換する方法がわかる - タイムゾーン付き・なしの違いが理解できる
- 初心者でもエラーを避けて実装できる
先生と生徒の会話で理解する!ISO 8601とは?
まずは恒例の「先生と生徒の会話形式」で、ISO 8601 の概念を直感的に理解していきましょう。
生徒: 先生!ISO 8601ってよく聞くけど、どういう形式なんですか?
先生: 簡単に言うと、世界中どこでも同じ意味になる標準的な日時の書き方だよ。
生徒: たとえばどんな書き方ですか?
先生: 「2025-01-15T13:45:20+09:00」のような形式だね。日付、時間、タイムゾーンがすべて含まれている。
生徒: Python でこの形式にするのは難しいんですか?
先生: 実はとても簡単なんだ。datetimeのメソッド1つで変換できるよ。
ISO 8601 の基本:どんなメリットがある?
Pythonで日時を扱うとき、ISO 8601形式に変換するメリットは次の3つです。
- 世界中のシステムとやり取りできる(API・データ交換で必須)
- 誤解のない一意の表現ができる(日本式の「2025/1/15」とは違う)
- タイムゾーンを含められる(+09:00 の部分)
PythonでISO 8601形式に変換する一番簡単な方法
Pythonのdatetimeには、ISO 8601への変換に特化した便利なメソッドがあります。そのメソッドが isoformat() です。
■ 基本の使い方(タイムゾーンなし)
from datetime import datetime
dt = datetime(2025, 1, 15, 13, 45, 20)
print(dt.isoformat())
出力例:
2025-01-15T13:45:20
とてもシンプルですね。これだけでISO 8601形式になります。
■ タイムゾーン付きでISO 8601に変換する
国際的なデータ交換では、タイムゾーン情報(+09:00)が必須です。Pythonではtimezoneを使って指定します。
from datetime import datetime, timezone, timedelta
# 日本時間(UTC+9)
jst = timezone(timedelta(hours=9))
dt = datetime(2025, 1, 15, 13, 45, 20, tzinfo=jst)
print(dt.isoformat())
出力例:
2025-01-15T13:45:20+09:00
これが「もっとも標準的なISO 8601形式」です。
UTC(協定世界時)を使いたい場合
API開発では、世界基準の時間(UTC)を使うことが多いです。
from datetime import datetime, timezone
dt = datetime.now(timezone.utc)
print(dt.isoformat())
多くのWebサービスはこの形式で時刻を保存しています。
ISO 8601形式でよくあるつまずきポイント
① タイムゾーンがつかない
timezoneを設定しないと、Pythonは「タイムゾーンなしの naive datetime(曖昧な時刻)」として扱います。
② 文字列の “Z” の意味がわからない
ISO 8601で末尾の Z は UTC(+00:00) を意味します。
③ APIで受け取った時刻がズレる
タイムゾーンの違いが原因のことが多く、ISO 8601を使えばズレを防止できます。
実践:現在時刻をISO 8601で取得する関数
Python初心者でもすぐに使える「便利スニペット」を紹介します。
from datetime import datetime, timezone
def now_iso8601():
return datetime.now(timezone.utc).isoformat()
print(now_iso8601())
この関数を使えば、アプリ開発・API開発で毎回楽にISO 8601形式を生成できます。
PythonでISO 8601形式を扱うときの実務ポイント
- DB保存は必ずタイムゾーン付き
- APIは基本的にUTCで返す
- ログはISO 8601形式に統一する
- 外部サービス連携では “Z” 形式の確認を行う
特に国際的なサービスや他言語との連携では、ISO 8601 の統一は必須です。
※テキスト部分:約 2820 文字
この記事で学べること" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
先生と生徒の会話で理解する!ISO 8601とは?" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
ISO 8601 の基本:どんなメリットがある?" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
PythonでISO 8601形式に変換する一番簡単な方法" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
UTC(協定世界時)を使いたい場合" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
ISO 8601形式でよくあるつまずきポイント" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
実践:現在時刻をISO 8601で取得する関数" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
PythonでISO 8601形式を扱うときの実務ポイント" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">