Python|ISO8601形式の文字列とdatetimeオブジェクトを相互変換する

1. はじめに

Pythonで日付や時刻を扱う際に便利なのが、ISO8601形式の文字列datetimeオブジェクトの相互変換です。ISO8601形式とは、「2025-07-25T14:30:00」のように日付と時刻を統一フォーマットで表現する方法で、Web APIやデータのやり取りで広く使われています。

本記事では、Python|ISO8601形式の文字列とdatetimeオブジェクトを相互変換する方法について、初心者でも理解できるよう丁寧に解説していきます。具体的なコード例や実行結果を交えながら、実務や学習にも役立つ知識を身につけましょう。

 

2. PythonにおけるISO8601形式とdatetimeの基本

ISO8601とは?

ISO8601形式は、国際標準化機構(ISO)が定めた日付と時刻の表記形式です。Pythonのdatetimeモジュールは、この形式の文字列を簡単に扱うことができます。

datetimeオブジェクトをISO8601形式に変換

datetimeオブジェクトをISO8601形式の文字列に変換するには、isoformat()メソッドを使います。

from datetime import datetime

# 現在の日時を取得
now = datetime.now()

# ISO8601形式の文字列に変換
iso_string = now.isoformat()
print(iso_string)

実行結果:

2025-07-25T20:15:30.123456

ISO8601形式の文字列をdatetimeオブジェクトに変換

文字列からdatetimeオブジェクトに変換するには、fromisoformat()を使います(Python 3.7以降)。

from datetime import datetime

# ISO8601形式の文字列
iso_string = "2025-07-25T20:15:30"

# datetimeオブジェクトに変換
dt = datetime.fromisoformat(iso_string)
print(dt)

実行結果:

2025-07-25 20:15:30

 

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

Web APIとの連携でISO8601形式を使う

多くのREST APIでは、リクエストやレスポンスにISO8601形式の日付が使われています。たとえば、APIで取得したデータをdatetimeに変換して処理するときに便利です。

import json
from datetime import datetime

# APIレスポンス例(JSON文字列)
response = '{"timestamp": "2025-07-25T14:30:00"}'

# パースしてISO8601文字列を取り出す
data = json.loads(response)
iso_str = data["timestamp"]

# datetimeに変換
dt = datetime.fromisoformat(iso_str)

# 曜日を取得
weekday = dt.strftime("%A")
print(f"{dt} は {weekday} です。")

実行結果:

2025-07-25 14:30:00 は Friday です。

タイムゾーン付きのISO8601形式に対応する

タイムゾーン情報を含むISO8601形式(例:2025-07-25T14:30:00+09:00)を扱う場合は、dateutilライブラリのparser.parseを使うのが便利です。

from dateutil import parser

# タイムゾーン付きのISO8601形式
iso_str_tz = "2025-07-25T14:30:00+09:00"

# datetimeに変換
dt = parser.parse(iso_str_tz)
print(dt)

実行結果:

2025-07-25 14:30:00+09:00

 

4. 注意点・エラー対策

Pythonバージョンによる対応の違い

datetime.fromisoformat()はPython 3.7以降で利用可能です。古いバージョンではstrptime()を使って手動でパースする必要があります。

from datetime import datetime

# 古いPythonバージョン用
iso_string = "2025-07-25T20:15:30"
dt = datetime.strptime(iso_string, "%Y-%m-%dT%H:%M:%S")
print(dt)

実行結果:

2025-07-25 20:15:30

タイムゾーンの扱いに注意

fromisoformat()はタイムゾーンのあるISO8601文字列を完全にはサポートしていません。タイムゾーン付きの場合はdateutil.parser.parse()を使いましょう。

マイクロ秒の扱い

ISO8601形式にはマイクロ秒(例:.123456)が含まれることがあります。fromisoformat()はマイクロ秒も正しく処理しますが、精度が不要な場合は無視しても構いません。

 

5. まとめ

本記事では、PythonでISO8601形式の文字列とdatetimeオブジェクトを相互変換する方法について学びました。基本のisoformat()fromisoformat()に加え、dateutilライブラリを活用することで、タイムゾーンや細かな仕様にも対応できるようになります。

この知識は、API連携・ログ解析・データの整形など、実務に直結する場面で非常に役立ちます。Pythonで日付や時刻を自在に扱えるようになることは、データ処理の幅を大きく広げる第一歩です。ぜひ自分のプロジェクトでも活用してみてください!

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