PythonでISO 8601形式の日時に変換する方法を完全解説!初心者でもわかる時間フォーマットの基本
生徒
「Pythonで時間を表示するときに、ISO 8601っていう形式に変換できるって聞いたんですが、何のことかわかりません…」
先生
「いい質問ですね。ISO 8601は、世界中で共通に使われる日時の書き方です。Pythonではdatetimeモジュールを使えば、簡単にこの形式に変換できますよ。」
生徒
「どんな書き方なんですか?そして初心者でもできるんでしょうか?」
先生
「もちろんです!ISO 8601の仕組みと、Pythonでの変換方法を基礎からやさしく解説していきましょう。」
1. ISO 8601とは?
ISO 8601(アイエスオー はちろくまるいち)とは、日付や時間を表すための国際的な標準フォーマットです。例えば、次のような書き方がISO 8601の形式です:
2025-09-03(日付)2025-09-03T14:30:00(日付と時刻)2025-09-03T14:30:00+09:00(日付・時刻・タイムゾーン)
この形式は、どの国でも同じ順番で表記されるので、機械にとっても人にとっても分かりやすくなっています。
2. Pythonのdatetimeオブジェクトとは?
Pythonでは、datetime(でいとたいむ)モジュールを使って日付や時間を扱います。現在の日時を取得するには次のようにします。
from datetime import datetime
now = datetime.now()
print(now)
2025-09-03 14:30:00.123456
このように、現在の日時が「年-月-日 時:分:秒.マイクロ秒」の形式で表示されます。
3. datetimeをISO 8601形式に変換する方法
Pythonのdatetimeオブジェクトは、isoformat()というメソッドを使えば簡単にISO 8601形式に変換できます。
from datetime import datetime
now = datetime.now()
iso_time = now.isoformat()
print(iso_time)
2025-09-03T14:30:00.123456
Tは日付と時刻の区切りです。この形式がISO 8601です。
4. 秒以下やマイクロ秒を省略したいとき
isoformat()メソッドでは、秒以下やマイクロ秒(百万分の一秒)を省略することもできます。
from datetime import datetime
now = datetime.now()
iso_time = now.replace(microsecond=0).isoformat()
print(iso_time)
2025-09-03T14:30:00
このように、不要な情報をカットして見やすいISO 8601形式にすることも可能です。
5. タイムゾーンを含めたISO 8601形式に変換する
タイムゾーン(時差)も含めたISO 8601形式が必要なケースでは、datetimeオブジェクトにタイムゾーン情報をつけておく必要があります。
from datetime import datetime, timezone, timedelta
japan_tz = timezone(timedelta(hours=9))
now = datetime.now(japan_tz)
print(now.isoformat())
2025-09-03T14:30:00.123456+09:00
+09:00は日本時間(JST)を表します。タイムゾーン付きのISO形式は、APIや国際的なデータ連携でもよく使われます。
6. ISO 8601形式の文字列をdatetimeに変換する方法
逆に、ISO 8601形式の文字列からdatetime型に戻すにはfromisoformat()を使います。
from datetime import datetime
iso_str = "2025-09-03T14:30:00"
dt = datetime.fromisoformat(iso_str)
print(dt)
2025-09-03 14:30:00
文字列がT区切りで正しいISO形式になっていれば、そのままdatetimeに変換できます。
7. 応用:JSONファイルやAPIでの利用
ISO 8601形式は、Pythonで作るWeb APIやJSONファイルなどでもよく使われます。
たとえば、APIのレスポンスで次のような形をよく見かけます:
"created_at": "2025-09-03T14:30:00+09:00"
このように、標準化されたフォーマットで日付を扱うことで、異なるシステム間でも正確にデータをやり取りできるのです。
8. 注意点とトラブル対策
- タイムゾーンがついていないときは +00:00 とみなされることがある
→ サーバーやツールによって解釈が異なる場合があるため注意が必要です。 - 文字列の形式が少しでも違うとエラーになります
→Tがなかったり、時・分・秒が足りないとfromisoformat()でエラーになる可能性があります。 - APIと連携する場合はUTC(協定世界時)で処理することが多い
→ Pythonではtimezone.utcを使えばUTCタイムでの変換が可能です。