Pythonのdatetimeモジュールを使って、ISO8601形式(末尾が”Z”でミリ秒まで)の日時文字列を扱う方法について説明します。

datetimeオブジェクトをISO8601形式の文字列に変換する

PythonのdatetimeオブジェクトをISO8601形式の文字列に変換するには、strftime関数を使用します。以下に例を示します。

import datetime
dt = datetime.datetime(2021, 1, 1, 2, 3, 4, 123456, tzinfo=datetime.timezone.utc)
expected = "2021-01-01T02:03:04.123Z"
actual = dt.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
print(actual)  # '2021-01-01T02:03:04.123456Z'

しかし、この方法ではマイクロ秒まで出力されてしまいます。ミリ秒までの出力を得るには、以下のようにisoformatメソッドと文字列操作を組み合わせます。

tmp = dt.isoformat(timespec="milliseconds")
print(tmp)  # 2021-01-01T02:03:04.123+00:00
actual = tmp[0:23] + "Z"
print(actual)  # 2021-01-01T02:03:04.123Z

UTCのdatetimeオブジェクトのISO形式が”Z”を含まない理由

Pythonのdatetimeオブジェクトはデフォルトでタイムゾーン情報を持たないため、UTCのdatetimeオブジェクトのISO形式には”Z”が含まれません。これはISO 8601の仕様(タイムゾーン情報がない場合はローカルタイムとみなす)に反しています。

まとめ

PythonでISO8601形式の日時文字列を扱うには、datetimeモジュールのstrftimeisoformatメソッドを使用します。ただし、UTCのdatetimeオブジェクトのISO形式に”Z”を含めるには、追加の文字列操作が必要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です