Pythonのdatetimeエラー can’t subtract offset-naive and offset-aware datetimes

“can’t subtract offset-naive and offset-aware datetimes" というエラーメッセージは、Pythonのdatetimeオブジェクト間で操作を行う際に、タイムゾーン情報が含まれていない(offset-naive)datetimeオブジェクトと、タイムゾーン情報が含まれている(offset-aware)datetimeオブジェクトを引き算しようとしたときに発生します。

このエラーを解決するには、次の方法のいずれかを選択する必要があります:

  1. タイムゾーン情報を持たないdatetimeオブジェクトをタイムゾーン情報を持つdatetimeオブジェクトに変換する。

例えば、タイムゾーン情報を持たないdatetimeオブジェクトを持つdatetimeオブジェクトに変換するには、pytzモジュールを使用できます。

python
from datetime import datetime import pytz naive_datetime = datetime(2023, 10, 13, 12, 0, 0) timezone = pytz.timezone('America/New_York') aware_datetime = timezone.localize(naive_datetime)
  1. タイムゾーン情報を持たないdatetimeオブジェクトにタイムゾーン情報を付けずに操作する。

操作を行うdatetimeオブジェクトがタイムゾーン情報を持たない場合、もう一方のdatetimeオブジェクトもタイムゾーン情報を持たないように操作を行う必要があります。

python
from datetime import datetime naive_datetime1 = datetime(2023, 10, 13, 12, 0, 0) naive_datetime2 = datetime(2023, 10, 14, 12, 0, 0) result = naive_datetime2 - naive_datetime1

どちらの方法を選択するかは、コードの要件によります。必要に応じて、タイムゾーン情報を適切に扱い、datetimeオブジェクトを操作してください。