🐍 Python

timedelta で日時の加減算をする

timedeltaは「期間」を表すクラスで、日時オブジェクトに足したり引いたりすることで「何日後」「何時間前」を計算できます。また、2つの日時を引き算すると、その差がtimedeltaとして得られます。

timedelta(days=n, hours=n, minutes=n, seconds=n, weeks=n)
dt + timedelta(...)  # n日後・n時間後などを計算
dt2 - dt1            # 差分がtimedeltaで返る
from datetime import datetime, timedelta

d1 = datetime(2026, 8, 10)
delta = timedelta(days=7)
print(d1 + delta)
# 2026-08-17 00:00:00
print(d1 - delta)
# 2026-08-03 00:00:00
# 2つの日時の差分はtimedelta型になる
from datetime import datetime

d1 = datetime(2026, 8, 10)
d2 = datetime(2026, 8, 20, 15, 0, 0)
diff = d2 - d1
print(diff)
# 10 days, 15:00:00
print(type(diff))
# 
print(diff.days)
# 10
print(diff.total_seconds())
# 918000.0
# 複数の単位を組み合わせて指定できる
from datetime import timedelta

print(timedelta(hours=25))
# 1 day, 1:00:00 ← 24時間を超えると自動的に日数に繰り上がる
print(timedelta(weeks=1, days=2))
# 9 days, 0:00:00
timedeltaの主な引数と属性
引数: days, seconds, microseconds, milliseconds, minutes, hours, weeks
すべてキーワード引数で指定可能。内部的にはdays・seconds・microsecondsの3つに正規化される
属性: .days
合計日数の整数部分のみ(時間や分の情報は含まれない)
メソッド: .total_seconds()
timedelta全体を秒数(float)に変換する。時間・分・日をまたぐ差分をまとめて扱いたいときに便利
💡 AIコードレビュー観点:.daysだけで日数を判定すると端数を見落とす

diff.days >= 1のような判定は、"1日と23時間59分"のような場合も"1日"としてカウントする一方、"23時間59分"のように1日未満の場合は.daysが0になり判定から漏れます。AIが生成したコードで「n日以上経過したか」を厳密に判定したい場合は、.daysだけでなく.total_seconds()と秒数の閾値で比較する方が意図とずれにくくなります。

← Python datetime クイックリファレンス一覧へ戻る / 比較演算子で日時を比較する →