🐍 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)を理解する →