ISO-8601 日付文字列から datetime オブジェクトを作成する方法

PythonBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Python を使用して ISO-8601 形式の日付文字列から datetime オブジェクトを作成する方法を探ります。ISO-8601 日付形式の基本的な理解、日付文字列を解析する方法、および結果として得られる datetime オブジェクトの操作方法について説明します。この知識は、Python アプリケーションで日付と時刻のデータを扱うすべての人にとって役立つでしょう。

ISO-8601 日付形式の理解

ISO-8601 は、日付と時刻を表すための国際標準です。これは、日付と時刻の情報を一貫して明確に表現する方法を提供しており、国際的および異文化間のコミュニケーションにおいて特に重要です。

ISO-8601 日付形式は「YYYY-MM-DD」のパターンに従います。ここで:

  • YYYY は西暦 4 桁の年を表します。
  • MM は 2 桁の月を表します(1 月は 01、2 月は 02 など)。
  • DD は 2 桁の日を表します(01 から 31)。

たとえば、2023 年 1 月 1 日の日付は、ISO-8601 形式では「2023-01-01」と表されます。

ISO-8601 標準には、時刻、タイムゾーン、および日付と時刻の組み合わせ情報を表す形式も含まれています。一般的な ISO-8601 日付と時刻の形式には以下のようなものがあります。

  • 日付: YYYY-MM-DD
  • 時刻: hh:mm:ss
  • 日付と時刻: YYYY-MM-DDThh:mm:ss
  • 日付、時刻、およびタイムゾーン: YYYY-MM-DDThh:mm:ssZ(UTC の場合)または YYYY-MM-DDThh:mm:ss±hh:mm(ローカルタイムゾーンの場合)

ISO-8601 日付形式を理解することは、プログラミングにおいて日付と時刻のデータを扱う上で重要です。なぜなら、この形式はこれらの情報を一貫して明確に表現し交換する方法を提供するからです。

ISO-8601 日付文字列を解析する

Python では、組み込みの datetime モジュールを使用して、ISO-8601 日付文字列を解析し、datetime オブジェクトを作成することができます。datetime.fromisoformat() 関数はこれを行う便利な方法です。

以下に例を示します。

from datetime import datetime

iso_date_string = "2023-04-15T12:34:56Z"
datetime_obj = datetime.fromisoformat(iso_date_string)
print(datetime_obj)  ## Output: 2023-04-15 12:34:56

この例では、まず Python 標準ライブラリから datetime モジュールをインポートします。次に、ISO-8601 日付文字列を定義し、datetime.fromisoformat() 関数を使用してそれを解析し、datetime オブジェクトを作成します。

datetime.fromisoformat() 関数は、以下を含むさまざまな ISO-8601 日付と時刻の形式を扱うことができます。

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss
  • YYYY-MM-DDThh:mm:ssZ (UTC の場合)
  • YYYY-MM-DDThh:mm:ss±hh:mm (ローカルタイムゾーンの場合)

入力文字列が有効な ISO-8601 形式と一致しない場合、datetime.fromisoformat() 関数は ValueError を発生させます。

以下は、タイムゾーンオフセット付きの ISO-8601 日付文字列を解析する例です。

from datetime import datetime

iso_date_string = "2023-04-15T12:34:56+02:00"
datetime_obj = datetime.fromisoformat(iso_date_string)
print(datetime_obj)  ## Output: 2023-04-15 12:34:56+02:00

この場合、datetime オブジェクトにはタイムゾーンオフセット情報が含まれており、異なるタイムゾーン間で日付と時刻のデータを扱う際に便利です。

datetime オブジェクトの操作

ISO-8601 日付文字列から datetime オブジェクトを作成したら、それに対してさまざまな操作や処理を行うことができます。

日付と時刻の要素にアクセスする

datetime オブジェクトの個々の要素には、以下の属性を使用してアクセスできます。

  • year: 西暦 4 桁の年
  • month: 月 (1 - 12)
  • day: 日 (1 - 31)
  • hour: 時 (0 - 23)
  • minute: 分 (0 - 59)
  • second: 秒 (0 - 59)
  • microsecond: マイクロ秒 (0 - 999999)

以下に例を示します。

from datetime import datetime

datetime_obj = datetime.fromisoformat("2023-04-15T12:34:56.789Z")
print(f"Year: {datetime_obj.year}")
print(f"Month: {datetime_obj.month}")
print(f"Day: {datetime_obj.day}")
print(f"Hour: {datetime_obj.hour}")
print(f"Minute: {datetime_obj.minute}")
print(f"Second: {datetime_obj.second}")
print(f"Microsecond: {datetime_obj.microsecond}")

日付と時刻の計算を行う

datetime オブジェクトを使用して、時間差の加算や減算、日付の比較など、さまざまな計算を行うことができます。以下に例を示します。

from datetime import datetime, timedelta

## Create a datetime object
start_date = datetime.fromisoformat("2023-04-15T12:34:56Z")

## Add 3 days and 12 hours
end_date = start_date + timedelta(days=3, hours=12)
print(f"End date: {end_date}")  ## Output: 2023-04-18 12:34:56+00:00

## Calculate the time difference
time_diff = end_date - start_date
print(f"Time difference: {time_diff}")  ## Output: 3 days, 0:00:00

datetime オブジェクトを操作することで、Python アプリケーションで日付と時刻に関連する操作を簡単に行うことができ、日付と時刻のデータを正確かつ信頼性高く扱うことができます。

まとめ

このチュートリアルの最後まで学ぶことで、Python で ISO-8601 日付文字列から datetime オブジェクトを作成する方法をしっかりと理解することができるようになります。日付文字列を解析し、さまざまな日付形式を扱い、得られた datetime オブジェクトを操作してさまざまな日付と時刻の演算を行うことができるようになります。この知識は、日付と時刻のデータを扱う堅牢で信頼性の高い Python アプリケーションを構築するために不可欠です。