【Python】日時の計算(加算・減算):timedeltaの使い方

Pythonで「100日後の日付」や「3時間前の時刻」などを計算する場合、標準ライブラリ datetime モジュールの timedelta クラスを使用します。

date 型や datetime 型のオブジェクトに対して timedelta を足し引きすることで、カレンダー(うるう年や月末の処理など)を自動的に考慮した正確な計算が可能です。

目次

1. 日時の加算(未来の日時を求める)

timedelta オブジェクトを作成し、元の日時オブジェクトに + 演算子で加算します。

ソースコード

from datetime import datetime, date, timedelta

# 基準となる日付と日時
base_date = date(2024, 12, 22)
base_datetime = datetime(2024, 12, 22, 12, 0, 30)

# 加算したい期間(100日)を定義
# timedeltaには days, seconds, microseconds, milliseconds, minutes, hours, weeks が指定可能
delta = timedelta(days=100)

# 計算の実行
future_date = base_date + delta
future_datetime = base_datetime + delta

print(f"基準日      : {base_date}")
print(f"100日後の日付: {future_date}")
print("-" * 30)
print(f"基準日時    : {base_datetime}")
print(f"100日後の日時: {future_datetime}")

実行結果

基準日      : 2024-12-22
100日後の日付: 2025-04-01
------------------------------
基準日時    : 2024-12-22 12:00:30
100日後の日時: 2025-04-01 12:00:30

※自動的に年が明け、月も正しく計算されています。

2. 日時の減算(過去の日時・差分の計算)

- 演算子を使うことで、「N日前」の計算や、2つの日時の「差(期間)」を求めることができます。

実装例:経過日数の計算

from datetime import datetime

# 過去の日時
start_time = datetime(2024, 1, 1, 9, 0, 0)
# 現在の日時(例として固定値を使用)
end_time = datetime(2025, 12, 22, 18, 30, 0)

# 日時同士を引き算すると、結果は timedelta オブジェクトになります
elapsed_time = end_time - start_time

print(f"開始: {start_time}")
print(f"終了: {end_time}")
print("-" * 30)
print(f"経過期間: {elapsed_time}")
print(f"総日数  : {elapsed_time.days} 日")
print(f"総秒数  : {elapsed_time.total_seconds()} 秒")

実行結果

開始: 2024-01-01 09:00:00
終了: 2025-12-22 18:30:00
------------------------------
経過期間: 721 days, 9:30:00
総日数  : 721 日
総秒数  : 62328600.0 秒

解説

timedeltaの主な引数

timedelta コンストラクタには以下の引数を指定できます(全て省略可能、デフォルトは0)。これらを組み合わせて柔軟な期間を表現できます。

  • days(日)
  • hours(時間)
  • minutes(分)
  • seconds(秒)
  • weeks(週間)
    • ※注意: yearsmonths は引数に存在しません。月や年単位の計算が必要な場合は、dateutil.relativedelta という外部ライブラリを使うのが一般的です。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次