Python の timedelta で日数・時間を加算・減算する
Python で日付や時刻に対して「3日後」や「2時間前」といった計算をするには、datetime モジュールの timedelta クラスを使います。
基本的な使い方
timedelta は日数や秒数などの「時間の長さ」を表すオブジェクトです。datetime オブジェクトに対して加算・減算することで、未来や過去の日時を求められます。
from datetime import datetime, timedelta
now = datetime.now()
print(f"現在: {now}")
# 3日後
three_days_later = now + timedelta(days=3)
print(f"3日後: {three_days_later}")
# 5日前
five_days_ago = now - timedelta(days=5)
print(f"5日前: {five_days_ago}")
timedelta(days=3) のように、キーワード引数で時間の長さを指定します。マイナスの値を渡すこともできますが、減算演算子を使うほうが直感的でしょう。
指定できる単位
timedelta には複数の単位を同時に指定できます。
| weeks | 週 |
| days | 日 |
| hours | 時間 |
| minutes | 分 |
| seconds | 秒 |
| milliseconds | ミリ秒 |
| microseconds | マイクロ秒 |
複数の単位を組み合わせた例を見てみましょう。
from datetime import datetime, timedelta
now = datetime.now()
# 1週間と3日後
delta = timedelta(weeks=1, days=3)
future = now + delta
print(f"1週間と3日後: {future}")
# 2時間30分前
delta = timedelta(hours=2, minutes=30)
past = now - delta
print(f"2時間30分前: {past}")
内部的には、すべての値が日数・秒・マイクロ秒の3つに正規化されて保持されます。そのため timedelta(hours=25) は timedelta(days=1, hours=1) と同じ意味になります。
日付のみの date オブジェクトでも使える
datetime だけでなく、日付のみを扱う date オブジェクトに対しても timedelta は使えます。ただし、時間単位(hours や minutes)を指定しても日付部分にしか反映されません。
from datetime import date, timedelta
today = date.today()
print(f"今日: {today}")
# 1週間後
next_week = today + timedelta(weeks=1)
print(f"1週間後: {next_week}")
# 100日前
hundred_days_ago = today - timedelta(days=100)
print(f"100日前: {hundred_days_ago}")
日付の加減算は、締め切り計算やスケジュール管理でよく使うパターンです。timedelta を使いこなせば、面倒な日数計算から解放されます。