🐍 Python

isoformat() / fromisoformat() でISO 8601形式に変換する

ISO 8601は「2026-08-10T09:05:03」のように年月日と時刻をTでつなぐ、国際的に標準化された日時表記です。API通信やログ、JSONでのやり取りによく使われます。isoformat()で変換し、fromisoformat()で読み戻します。

dt.isoformat()               # ISO 8601形式の文字列に変換
dt.isoformat(sep=" ")        # T の代わりに任意の区切り文字を指定
datetime.fromisoformat(s)    # ISO 8601形式の文字列をdatetimeに変換
from datetime import datetime

d = datetime(2026, 8, 10, 9, 5, 3)
print(d.isoformat())
# 2026-08-10T09:05:03
# sep引数で区切り文字を変えられる
from datetime import datetime

d = datetime(2026, 8, 10, 9, 5, 3)
print(d.isoformat(sep=" "))
# 2026-08-10 09:05:03

# dateオブジェクトのisoformat()は年月日のみ
from datetime import date
print(date(2026, 8, 10).isoformat())
# 2026-08-10
# fromisoformat()で文字列からdatetimeに戻す
from datetime import datetime

from_iso = datetime.fromisoformat("2026-08-10T09:05:03")
print(from_iso)
# 2026-08-10 09:05:03
print(type(from_iso))
# 
# タイムゾーン付き日時は末尾にオフセットが付く
from datetime import datetime, timezone

dt_tz = datetime(2026, 8, 10, 9, 5, 3, tzinfo=timezone.utc)
print(dt_tz.isoformat())
# 2026-08-10T09:05:03+00:00
isoformat関連の引数
isoformat()のsep引数
日付部分と時刻部分の区切り文字。省略時は"T"
fromisoformat()の対応範囲
Python 3.11以降はisoformat()が出力しうる形式(タイムゾーン付き含む)をほぼ全て読み戻せる。3.10以前は対応する記法がやや限定的
💡 AIコードレビュー観点:strptimeよりisoformat系を優先する場面

API・JSON・ログファイルなど「機械同士でやり取りする日時」はISO 8601形式であることが多く、その変換には書式文字列を手書きするstrptime()よりfromisoformat()の方が誤字の心配がなく安全です。AIが生成したコードで、ISO形式の文字列に対してわざわざstrptime(s, "%Y-%m-%dT%H:%M:%S")のような書式を手書きしている場合は、fromisoformat()への置き換えを検討する価値があります。

← Python datetime クイックリファレンス一覧へ戻る / タイムゾーン(aware/naive)を理解する →