カテゴリ: Python 更新日: 2026/05/31

PythonでISO 8601形式の日時に変換する方法を完全解説!初心者でもわかる時間フォーマットの基本

Pythonで時間のフォーマットをISO 8601に変換する方法
Pythonで時間のフォーマットをISO 8601に変換する方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonで時間を表示するときに、ISO 8601っていう形式に変換できるって聞いたんですが、何のことかわかりません…」

先生

「いい質問ですね。ISO 8601は、世界中で共通に使われる日時の書き方です。Pythonではdatetimeモジュールを使えば、簡単にこの形式に変換できますよ。」

生徒

「どんな書き方なんですか?そして初心者でもできるんでしょうか?」

先生

「もちろんです!ISO 8601の仕組みと、Pythonでの変換方法を基礎からやさしく解説していきましょう。」

1. ISO 8601とは?

1. ISO 8601とは?
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オブジェクトとは?

2. Pythonのdatetimeオブジェクトとは?
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形式に変換する方法

3. datetimeをISO 8601形式に変換する方法
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. 秒以下やマイクロ秒を省略したいとき

4. 秒以下やマイクロ秒を省略したいとき
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形式に変換する

5. タイムゾーンを含めた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に変換する方法

6. ISO 8601形式の文字列をdatetimeに変換する方法
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での利用

7. 応用:JSONファイルやAPIでの利用
7. 応用:JSONファイルやAPIでの利用

ISO 8601形式は、Pythonで作るWeb APIやJSONファイルなどでもよく使われます。

たとえば、APIのレスポンスで次のような形をよく見かけます:


"created_at": "2025-09-03T14:30:00+09:00"

このように、標準化されたフォーマットで日付を扱うことで、異なるシステム間でも正確にデータをやり取りできるのです。

8. 注意点とトラブル対策

8. 注意点とトラブル対策
8. 注意点とトラブル対策
  • タイムゾーンがついていないときは +00:00 とみなされることがある
    → サーバーやツールによって解釈が異なる場合があるため注意が必要です。
  • 文字列の形式が少しでも違うとエラーになります
    Tがなかったり、時・分・秒が足りないとfromisoformat()でエラーになる可能性があります。
  • APIと連携する場合はUTC(協定世界時)で処理することが多い
    → Pythonではtimezone.utcを使えばUTCタイムでの変換が可能です。

まとめ

まとめ
まとめ

ISO 8601形式とPython datetimeの総整理

今回は、Pythonで日付と時刻を扱ううえで非常に重要となるISO 8601形式について、基本から応用まで一通り確認してきました。ISO 8601は世界共通の日時フォーマットであり、システム間のデータ連携やAPI通信、JSONデータのやり取りなど、あらゆる場面で利用されています。特にPythonではdatetimeモジュールを活用することで、このISO 8601形式への変換や、逆に文字列からdatetimeへの変換をシンプルに実装できる点が大きな魅力です。

初心者の方にとっては、日付と時刻の扱いは少し難しく感じる部分かもしれませんが、今回紹介したisoformatメソッドやfromisoformatメソッドを理解することで、実務でも通用するレベルの処理が可能になります。また、タイムゾーンの考え方や、マイクロ秒の扱いなども重要なポイントです。特に国際的なシステム開発やクラウドサービスでは、UTCやJSTといった時間の違いを正確に扱う必要があるため、ここでの知識は非常に役立ちます。

実務で役立つポイントの振り返り

  • ISO 8601形式は「年-月-日T時:分:秒」という統一された書き方である
  • Pythonではdatetimeオブジェクトから簡単に変換できる
  • isoformatを使えば一発でISO形式になる
  • replaceを使えばマイクロ秒の除去も可能
  • timezoneを設定すれば時差付きのISO形式を扱える
  • fromisoformatで文字列からdatetimeへ変換できる

サンプルプログラムで理解を深める


from datetime import datetime, timezone, timedelta

class DateTimeUtil:

    @staticmethod
    def get_iso_now():
        now = datetime.now()
        return now.isoformat()

    @staticmethod
    def get_iso_now_no_microsecond():
        now = datetime.now()
        return now.replace(microsecond=0).isoformat()

    @staticmethod
    def get_iso_with_timezone():
        jst = timezone(timedelta(hours=9))
        now = datetime.now(jst)
        return now.isoformat()

    @staticmethod
    def parse_iso_string(iso_str):
        return datetime.fromisoformat(iso_str)


if __name__ == "__main__":
    print(DateTimeUtil.get_iso_now())
    print(DateTimeUtil.get_iso_now_no_microsecond())
    print(DateTimeUtil.get_iso_with_timezone())

    iso_text = "2025-09-03T14:30:00"
    print(DateTimeUtil.parse_iso_string(iso_text))

このようにクラス化しておくことで、プロジェクト全体で日付処理を共通化でき、保守性の高いコードになります。特に業務システムやWebアプリケーションでは、このようなユーティリティクラスを用意しておくことが重要です。

開発現場での活用イメージ

ISO 8601形式は、ログ出力、データベース保存、APIレスポンス、フロントエンドとのデータ受け渡しなど、あらゆる場面で利用されます。例えば、バックエンドで生成した日時をISO形式で返却することで、フロントエンド側のJavaScriptでも簡単に扱うことができます。また、クラウドサービスや外部APIとの連携では、この形式が標準となっていることが多く、対応できるかどうかで開発効率が大きく変わります。

さらに、日付の比較やソート処理においても、ISO形式は文字列のままでも時系列順に並ぶという利点があります。これはデータ処理の効率化にもつながる重要なポイントです。

先生と生徒の振り返り会話

生徒

「ISO 8601って難しそうだと思っていましたが、Pythonなら簡単に扱えるんですね。特にisoformatはすごく便利だと感じました。」

先生

「そうですね。datetimeモジュールを理解すれば、日付処理はかなり楽になります。実務ではほぼ必須の知識ですよ。」

生徒

「タイムゾーンの扱いが少し難しかったですが、これも慣れれば問題なさそうです。海外のサービスと連携するなら必須ですね。」

先生

「その通りです。特にUTCとローカル時間の違いはしっかり理解しておきましょう。トラブルの原因になりやすい部分ですからね。」

生徒

「今回の内容を使えば、API開発やデータ処理にも応用できそうです。今後の開発に活かしていきたいです。」

先生

「ぜひ実際のコードで試してみてください。繰り返し使うことで自然と身につきますし、より理解も深まりますよ。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python の日時操作の記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.5
Java&Spring記事人気No5
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
PythonのSeabornで美しいデータ可視化を実現する方法!初心者でもわかるグラフ作成入門
No.8
Java&Spring記事人気No8
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック