ISO 8601形式の日付と時刻を解析するにはどうすればいいですか? 質問する

ISO 8601形式の日付と時刻を解析するにはどうすればいいですか? 質問する

解析する必要があるRFC 3339文字列"2008-09-03T20:56:35.450686Z"を Python のdatetime型に変換します。

見つけたstrptimePython 標準ライブラリにはありますが、あまり便利ではありません。

これを行う最善の方法は何ですか?

ベストアンサー1

isoparsepython-dateutilの関数

python-dateutilパッケージにはdateutil.parser.isoparse質問にあるようなRFC 3339の日時文字列だけでなく、他の8601 規格RFC 3339 に準拠していない日付と時刻の文字列 (UTC オフセットがないものや、日付のみを表すものなど)。

>>> import dateutil.parser
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)

python -dateutilパッケージには、dateutil.parser.parseと比較するとisoparse、おそらく厳密さは劣りますが、どちらも非常に寛容であり、渡された文字列を解釈しようとします。誤読の可能性を排除したい場合は、これらの関数のいずれかよりも厳密なものを使用する必要があります。

Python 3.7+の組み込みとの比較datetime.datetime.fromisoformat

dateutil.parser.isoparseは完全な ISO-8601 フォーマットパーサーですが、Python ≤ 3.10 ではfromisoformat意図的にサポートされていません。Python 3.11 では、有効な ISO 8601 のほぼすべての文字列をサポートします。この注意事項については、のドキュメントをfromisoformat参照してください。(fromisoformatこの答え)。

おすすめ記事