Python で ISO 8601 日付を解析する

Olorunfemi Akinlua 2023年6月21日
  1. ISO 8601 日付の構造
  2. strptime()strtime() を使用して Python で ISO 8601 日付を解析する
  3. fromisoformat() を使用して Python で ISO 8601 日付を解析する
  4. dateutil を使用して Python で ISO 8601 日付を解析する
Python で ISO 8601 日付を解析する

日付は誰にとっても重要であり、私たちが使用する多くのアプリケーションにとって重要です。 開発者は、さまざまなタイム ゾーンまたはタイム オブジェクトが存在し、それらを回避することに少し混乱する可能性があります。

ただし、多くの場合、作業を容易にする標準が存在し、それがこの記事で説明する内容です。 さらに、典型的な ISO 8601 日付の構造について説明し、典型的な DateTime オブジェクトを解析して、あらゆる場所で使用できる標準化された DateTime にする方法を示します。

ISO 8601 日付の構造

ISO (国際標準化機構) は、多くの場合、技術分野と非技術分野を含む、さまざまな分野にわたる加盟国の標準化の作成に取り組んでいます。 エンジニアリングなどの分野は、彼らの優先事項の一部です。

多数の標準化には、月、日、時、分、秒、およびミリ秒で表される ISO 8601 DateTime が含まれます。 これは、あらゆるデータの DateTime 標準として世界中で使用されており、時間ベースであるため、不正確な表現やエラーを防ぐことができます。

世界中で使用される Python アプリケーションを構築する場合、ISO 8601 DateTime オブジェクトを理解することが重要であり、それを解析することが必要になる場合があります。

ISO 8601 datetime は、左から始まり、ミリ秒パラメーターで終わる年で表され、多くの場合、T から Z までの他のコンピューター文字と組み合わされます。

2022-08-10 17:00:00.000

上記の ISO DateTime オブジェクトは、2022 年 8 月 11 日の午後 5 時を表します。 ローカルタイムゾーン内。

ISO 8601 DateTime 文字列には日付セクションが必要ですが、時間セクションはオプションであると述べることが重要です。 これらは ISO 8601 の異なるバリアントですが、上記はこの記事の参照になります。

strptime()strtime() を使用して Python で ISO 8601 日付を解析する

Python には、さまざまな操作に役立つさまざまなモジュールがプリインストールされています。これらのプリインストールされたモジュールの 1つは、日付と時刻の操作に役立つ datetime です。 datetime モジュールを使用すると、datetime(年、月、日[、時[、分[、秒[、マイクロ秒[、tzinfo]]]]]) 値を取得できます。

now() メソッド は、現在の日付と時刻を取得して展開するのに役立ち、必要な情報を取得するために操作または解析できる典型的な DateTime オブジェクトを提供します。

from datetime import datetime

todaysDate = datetime.now()

print(todaysDate)

出力:

2022-09-28 06:55:56.832983

また、today() メソッド を使用して同じ値を取得することもできます。 ただし、now() メソッドは today() メソッドよりも優先されます。

AnoTodaysDate = datetime.today()

出力:

2022-09-29 10:48:43.311880

前に、典型的な Python DateTime オブジェクトを標準化された ISO 6801 DateTime に解析しました。 Python DateTime オブジェクトを使用して ISO 6801 DateTime を作成することで、これを逆にしましょう。

これを実現するには、DateTime オブジェクトを文字列表現 (今回は ISO 6801 DateTime 文字列) に変換するのに役立つ strftime() メソッドが必要です。

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.strftime("%Y-%m-%dT%H:%M:%S.%f%z")

print(todaysDateInISO)

出力:

2022-09-29T11:08:29.413183

todaysDate バインディングは、現在の日付と時刻の Python DateTime オブジェクトを保持します。次に、バインディングを引数として strftime() メソッドに渡し、ISO 8601 の DateTime 文字列に相当するものを作成します。

これらを踏まえて、ISO 8601 の DateTime 文字列を Python の DateTime オブジェクトに変換するにはどうすればよいでしょうか? strftime() メソッドの反対を行うメソッド、strptime() が必要です。

このメソッドは、DateTime 文字列から DateTime オブジェクトを作成します。

したがって、strptime() の最初の引数として ISO 6801 DateTime 文字列を渡し、必要な日付形式を定義する別の引数として Python DateTime オブジェクト %Y-%m-%dT%H:%M:%SZ.

parsedDate = datetime.strptime("2022-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")
print(parsedDate)

出力:

2022-03-04 21:08:12

Y-%m-%dT%H:%M:%SZ 日付形式は、Python DateTime オブジェクト内で指定された 形式コード を使用して、年、月、日、時、分、および秒を処理します。

fromisoformat() を使用して Python で ISO 8601 日付を解析する

strftime() および strptime() メソッドと同様に、ISO 6801 DateTime 文字列を作成したり、Python DateTime オブジェクトに変換したりできる専用のメソッドがあります。 isoformat() メソッドは、YYYY-MM-DD HH:MM:SS.mmmmmm 形式で処理される ISO に従ってフォーマットされた時刻を返すのに役立ちます。

さらに重要なことに、fromisoformat() メソッドは ISO 8601 DateTime 文字列を受け取り、同等の Python DateTime オブジェクトを返します。

Python DateTime オブジェクトから ISO 8601 を作成するには、まず now() メソッドを使用して DateTime オブジェクトを作成し、isoformat() を使用して結果の ISO 8601 プロパティ (フォーマット) を取得します。

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.isoformat()

print(todaysDateInISO)

出力:

2022-09-28T07:46:13.350585

多くの場合、結果には日付と時刻の間に区切りが含まれます。 ここでは、T であり、変更できます。 引数を渡すことでセパレータを変更できます。

todaysDateInISO = todaysDate.isoformat("$")

print(todaysDateInISO)

出力:

2022-09-28$07:48:11.060212

問題の要点として、ISO 8601 DateTime 文字列を解析して、典型的な Python DateTime オブジェクトにすることができます。

parsedDate = datetime.fromisoformat(todaysDateInISO)
print(parsedDate)

出力:

2022-09-29 14:38:17.928655

dateutil を使用して Python で ISO 8601 日付を解析する

dateutil Python モジュールは、組み込みの datetime モジュールを介してアクセスできる機能を拡張するために使用できるサードパーティ モジュールです。

それをインストールするには、pip コマンドを利用できます。

pip install python-dateutil

出力:

Collecting python-dateutil
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 506.3 kB/s eta 0:00:00
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, python-dateutil
Successfully installed python-dateutil-2.8.2 six-1.16.0

さらに、pipコマンドを使用してインストールできるpytzと呼ばれる別のサードパーティ モジュールを使用して、タイム ゾーン機能を導入することもできます。

pip install pytz

これらのライブラリは、タイム ゾーンに基づいて ISO 8601 日付形式を簡単に作成し、ISO 8601 DateTime 文字列を解析して、典型的な Python DateTime オブジェクトにすることができます。

この例では、US/Eastern タイム ゾーンを使用し、timezone() メソッド、now() メソッド、および isoformat() メソッドを使用して ISO 8601 DateTime 文字列を作成します。

from datetime import datetime
import pytz

usEasternDate = datetime.now(pytz.timezone("US/Eastern"))
print(usEasternDate)

usEasternDateISO = usEasternDate.isoformat()
print(usEasternDateISO)

出力:

2022-09-29 10:01:17.654150-04:00
2022-09-29T10:01:17.654150-04:00

次に、ISO 8601 DateTime 文字列を Python DateTime オブジェクトに解析するために、引数として渡された ISO 日付で parse() メソッドを使用できます。

parsedDate = parser.parse(usEasternDateISO)
print(parsedDate)

出力:

2022-09-29 10:01:17.654150-04:00
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn