目次
概要
ある日付の「N日後」「N日前」といった値を計算したい場合があります。
datetimeモジュールのtimedeltaを使うと、datetimeの加算(N日後)や減算(N日前)を表現できます。
datetimeモジュールの基本的な使い方は以下。
関連記事
概要 datetimeモジュールを使用して日付や時刻を扱う方法について紹介します。この記事ではdatetimeクラスを使用した日時取得等を説明します。 datetimeモジュール 基本的な型[…]
timedeltaの使用方法
日数計算の記述方法
・●日後:datetime変数 + timedelta(days=●)
・●日前:datetime変数 – timedelta(days=●)
・●日前:datetime変数 – timedelta(days=●)
日数計算
日数計算を行う場合、timedeltaクラスを使用します。
datetimeモジュールからtimedeltaクラスをインポートして使用します。
尚、同一モジュールから複数のクラス等をインポートする場合はカンマ区切りで記述します。
from datetime import datetime, timedelta
# 2023年12月25日のdatetimeを作成
the_day = datetime(2023, 12, 25)
# 10日前を計算
res_10days_before = the_day - timedelta(days=10)
print(res_10days_before) # 2023-12-15 00:00:00
# とある日付から100日後を計算-------------
some_day = datetime(2023, 6, 4)
res_100days_after = some_day + timedelta(days=100)
print(res_100days_after) # 2023-09-12 00:00:00
# とある日付から100日前を計算-------------
res_100days_before = some_day - timedelta(days=100)
print(res_100days_before) # 2023-02-24 00:00:00
timedeltaの日数計算は基準となる日を含めた計算を行っています。
補足:日数以外の計算
週計算、時分秒の計算
from datetime import datetime, timedelta
# とある日付から20週間-----------------
some_day = datetime(2023, 6, 4)
res_10weeks_after = some_day + timedelta(weeks=20)
print(res_10weeks_after) # 2023-10-22 00:00:00
# 2023年12月31日23時00分30秒から1時間後
the_day = datetime(2023, 12, 31, 23, 45, 15)
res_15minutes_after = the_day + timedelta(hours=1)
print(res_15minutes_after) # 2024-01-01 00:45:15
# 2023年12月31日23時45分30秒から15分後
the_day = datetime(2023, 12, 31, 23, 45, 30)
res_15minutes_after = the_day + timedelta(minutes=15)
print(res_15minutes_after) # 2024-01-01 00:00:30
# 2023年12月31日23時45分30秒から30秒後
the_day = datetime(2023, 12, 31, 23, 45, 30)
res_15minutes_after = the_day + timedelta(seconds=30)
print(res_15minutes_after) # 2023-12-31 23:46:00
datetime同士の差分
datetime同士の差分を行うと、その結果はtimedelta型になります。
以下は2023年6月4日は2023年1月1日から何日経過したかを計算しています。
差分の結果はtimedeltaで保持しています。
from datetime import datetime
# 2023年6月4日は2023年1月1日から何日後か
the_day = datetime(2023, 6, 4)
start_day = datetime(2023, 1, 1)
res = the_day - start_day
print(res) # 154 days, 0:00:00
print(type(res)) # <class 'datetime.timedelta'>
補足:datetime同士の差分結果timedeltaが保持する属性
datetimeなので時分秒単位で計算ができます。
計算結果のtimedeltaは以下の内容を保持します。
・差分となる日数:days
・差分となる秒数:seconds
・差分となるマイクロ秒:microseconds
※hours,minutesは保持していません
from datetime import datetime
# 日時計算(2023年6月4日10時30分は2023年1月1日0時0分からどれくらい経過したか)
the_day = datetime(2023, 6, 4, 10, 30)
start_day = datetime(2023, 1, 1, 0, 0)
res = the_day - start_day
print(res.days) # 154
print(res.seconds) # 37800
print(res.total_seconds()) # 13343400.0
# 154日と37800秒
# 13343400秒
上記の結果の意味は、「2023年6月4日10時30分は2023年1月1日0時0分から」
・154日と37800秒が経過
・合計で13343400秒経過(1日86400秒)
となります。