PythonでISO 8601形式の文字列を扱う:datetime.datetime.fromisoformat()完全解説

2024-04-02

Pythonのdatetime.datetime.fromisoformat()関数:詳細解説

datetime.datetime.fromisoformat()関数は、ISO 8601形式の文字列をdatetime.datetimeオブジェクトに変換します。ISO 8601形式は、日付と時刻を表す国際標準規格です。

機能

datetime.datetime.fromisoformat()関数は、以下の形式の文字列を受け取り、datetime.datetimeオブジェクトに変換します。

  • YYYY-MM-DD
  • YYYY-MM-DDTHH:mm

オプション

datetime.datetime.fromisoformat()関数には、以下のオプション引数があります。

  • kind: datetime.datetimeオブジェクトの種類を指定します。デフォルトはNoneで、タイムゾーン情報を持たないnaiveなオブジェクトになります。datetime.timezone.utcを指定すると、UTCタイムゾーンを持つawareなオブジェクトになります。
  • tzinfo: タイムゾーン情報を持つオブジェクトを指定します。datetime.timezoneオブジェクトや、pytzライブラリのタイムゾーンオブジェクトなどを指定できます。

from datetime import datetime

# YYYY-MM-DD形式の文字列
iso_str_1 = "2024-03-13"
dt_1 = datetime.datetime.fromisoformat(iso_str_1)

# YYYY-MM-DDTHH:mm形式の文字列
iso_str_2 = "2024-03-13T03:56"
dt_2 = datetime.datetime.fromisoformat(iso_str_2)

# YYYY-MM-DDTHH:mm:ss形式の文字列
iso_str_3 = "2024-03-13T03:56:00"
dt_3 = datetime.datetime.fromisoformat(iso_str_3)

# YYYY-MM-DDTHH:mm:ss.sss形式の文字列
iso_str_4 = "2024-03-13T03:56:00.123"
dt_4 = datetime.datetime.fromisoformat(iso_str_4)

# YYYY-MM-DDTHH:mm:ssZ形式の文字列
iso_str_5 = "2024-03-13T03:56:00Z"
dt_5 = datetime.datetime.fromisoformat(iso_str_5)

# YYYY-MM-DDTHH:mm:ss.sssZ形式の文字列
iso_str_6 = "2024-03-13T03:56:00.123Z"
dt_6 = datetime.datetime.fromisoformat(iso_str_6)

# オプション引数:kind
iso_str_7 = "2024-03-13T03:56:00.123"
dt_7 = datetime.datetime.fromisoformat(iso_str_7, kind=datetime.datetime.utc)

# オプション引数:tzinfo
from pytz import timezone

iso_str_8 = "2024-03-13T03:56:00.123"
tz_info = timezone("Asia/Tokyo")
dt_8 = datetime.datetime.fromisoformat(iso_str_8, tzinfo=tz_info)

print(dt_1)
print(dt_2)
print(dt_3)
print(dt_4)
print(dt_5)
print(dt_6)
print(dt_7)
print(dt_8)

出力例

2024-03-13 00:00:00
2024-03-13 03:56:00
2024-03-13 03:56:00
2024-03-13 03:56:00.123000
2024


datetime.datetime.fromisoformat()関数のサンプルコード

from datetime import datetime

# YYYY-MM-DD形式の文字列
iso_str = "2024-03-13"

# fromisoformat()関数でdatetimeオブジェクトに変換
dt = datetime.datetime.fromisoformat(iso_str)

# 出力
print(dt)

出力例

2024-03-13 00:00:00

タイムゾーン情報付きのdatetime.datetimeオブジェクト

from datetime import datetime, timezone

# YYYY-MM-DDTHH:mm:ssZ形式の文字列
iso_str = "2024-03-13T03:56:00Z"

# fromisoformat()関数でdatetimeオブジェクトに変換
dt = datetime.datetime.fromisoformat(iso_str)

# タイムゾーン情報を確認
print(dt.tzinfo)

# 出力

出力例

datetime.timezone.utc

オプション引数kind

from datetime import datetime

# YYYY-MM-DDTHH:mm:ss.sss形式の文字列
iso_str = "2024-03-13T03:56:00.123"

# kind='utc'を指定して、UTCタイムゾーンを持つdatetimeオブジェクトに変換
dt_utc = datetime.datetime.fromisoformat(iso_str, kind=datetime.datetime.utc)

# kind=Noneを指定して、タイムゾーン情報を持たないdatetimeオブジェクトに変換
dt_naive = datetime.datetime.fromisoformat(iso_str, kind=None)

# タイムゾーン情報を確認
print(dt_utc.tzinfo)
print(dt_naive.tzinfo)

# 出力

出力例

datetime.timezone.utc
None

オプション引数tzinfo

from datetime import datetime
from pytz import timezone

# YYYY-MM-DDTHH:mm:ss.sss形式の文字列
iso_str = "2024-03-13T03:56:00.123"

# Asia/Tokyoタイムゾーンを持つdatetimeオブジェクトに変換
dt_tokyo = datetime.datetime.fromisoformat(iso_str, tzinfo=timezone("Asia/Tokyo"))

# タイムゾーン情報を確認
print(dt_tokyo.tzinfo)

# 出力

出力例

<DstTzInfo 'Asia/Tokyo' LMT+0900:00 STD>

エラー処理

from datetime import datetime

# 不正な形式の文字列
iso_str = "2024-03-13T03:56:00.123X"

try:
    # fromisoformat()関数でdatetimeオブジェクトに変換
    dt = datetime.datetime.fromisoformat(iso_str)
except ValueError as e:
    # エラー発生時の処理
    print(e)

# 出力

出力例

'Unknown string format'

その他の形式

datetime.datetime.fromisoformat()関数は、以下の形式の文字列も受け取り、datetime.datetimeオブジェクトに変換できます。

  • YYYY-MM
  • YYYY
  • YYYY-WXX
  • YYYY-WXX-X

詳細は、Python datetime.datetime.fromisoformat() ドキュメント: [無効な URL を削除しました]。



datetime.datetime.fromisoformat()関数の代替方法

dateutilライブラリは、日付と時刻を扱うための便利な機能を提供します。

from dateutil import parser

# YYYY-MM-DDTHH:mm:ss形式の文字列
iso_str = "2024-03-13T03:56:00"

# parser.parse()関数でdatetimeオブジェクトに変換
dt = parser.parse(iso_str)

# 出力
print(dt)

出力例

2024-03-13 03:56:00

arrowライブラリは、日付と時刻を扱うための高機能なライブラリです。

import arrow

# YYYY-MM-DDTHH:mm:ss形式の文字列
iso_str = "2024-03-13T03:56:00"

# get()関数でdatetimeオブジェクトに変換
dt = arrow.get(iso_str)

# 出力
print(dt)

出力例

<Arrow [2024-03-13T03:56:00+00:00]>

手動で解析

簡単な形式であれば、手動で解析することも可能です。

# YYYY-MM-DD形式の文字列
iso_str = "2024-03-13"

# 文字列を分割
year, month, day = iso_str.split("-")

# datetimeオブジェクトを作成
dt = datetime(year=int(year), month=int(month), day=int(day))

# 出力
print(dt)

出力例

2024-03-13 00:00:00

上記の方法のどれを選択するかは、状況や目的に応じて決定する必要があります。




Python FileNotFoundError: デバッグとトラブルシューティング

PythonのFileNotFoundErrorは、ファイル操作中にファイルが見つからない場合に発生する例外です。ファイルの読み込み、書き込み、削除など、さまざまな操作で発生する可能性があります。原因FileNotFoundErrorが発生する主な原因は以下のとおりです。



デバッガーで Python ResourceWarning の原因を徹底分析! 問題解決への近道

ResourceWarningは、以下の状況で発生する可能性があります。メモリリーク: プログラムが不要になったメモリを解放しない場合、メモリリークが発生します。ファイルハンドルリーク: プログラムが不要になったファイルハンドルを閉じない場合、ファイルハンドルリークが発生します。


Pythonで潜む罠:RecursionErrorの正体と完全攻略マニュアル

Pythonでは、再帰呼び出しの最大回数に制限を設けています。これは、無限ループによるスタックオーバーフローを防ぐためです。デフォルトでは、この最大回数は1000です。再帰呼び出しが最大回数をを超えると、RecursionError例外が発生します。


SystemErrorとその他の例外

SystemErrorの詳細発生条件: インタプリタ内部でエラーが発生した場合原因: インタプリタのバグ深刻度: 致命的ではないが、プログラムの動作に影響を与える可能性がある関連値: エラーが発生した場所を示す文字列対処方法: 使用中の Python インタプリタのバージョンとエラーメッセージを報告する 可能であれば、代替の解決策を見つける 問題が修正されるまで、プログラムの使用を中止する


ImportError.name を解決する他の方法

発生原因ImportError. name は、以下のいずれかの理由で発生します。モジュールが存在しない: インポートしようとしているモジュールが実際に存在しない場合。モジュールの名前が間違っている: インポートしようとしているモジュールの名前を間違って記述している場合。



マルチプロセッシングモジュールの使い方

Pythonでは、マルチプロセッシング機能を提供するmultiprocessingモジュールが標準ライブラリとして用意されています。このモジュールには、複数のプロセスを作成・管理するための様々な機能が提供されています。プロセス:独立した実行環境を持つ処理単位


Pythonテキスト処理の達人になるための道:正規表現オブジェクト(re) のすべて

reモジュールで正規表現を使用するには、まず正規表現パターンをコンパイルして正規表現オブジェクトを作成する必要があります。正規表現オブジェクトは、パターンにマッチする文字列を検索したり、置換したり、その他の操作を行うためのメソッドを提供します。


Pythonで並行処理を実現する「contextvars.Token.old_value」の使い方

Pythonの「Concurrent Execution」は、複数のタスクを並行して実行する機能です。この機能には、コンテキスト変数と呼ばれる変数を使用することで、各タスク間でデータを共有したり、タスク実行状況を管理したりすることができます。


Pythonで特定の曜日の日付を取得する:datetime.datetime.year属性とtimedelta

datetime. datetime オブジェクトは、年、月、日、時、分、秒、マイクロ秒を含む日付と時刻を表す型です。datetime. datetime. year 属性は、そのオブジェクトが表す日付の年を表す整数値です。アクセス方法datetime


Utilities and Decorators

enum は、Python 3.4で導入された標準ライブラリであり、列挙型と呼ばれるデータ型を定義するためのモジュールです。列挙型は、数値や文字列の集合を名前付きの定数として定義するもので、コードの可読性と保守性を向上させることができます。