Python|日付や時刻の差分を計算する

1. はじめに

Pythonで「日付や時刻の差分を計算する」方法について解説します。
日付や時間の差を求める処理は、ログ解析やスケジューリング、経過時間の表示など、さまざまな場面で活用されます。
本記事では、datetimeモジュールを使って、初心者でも理解しやすい形で差分計算の基本から応用までを丁寧に解説します。

具体的なコード例と実行結果を交えながら、「何日前か?」「何時間後か?」「2つの日時の差は何日何時間か?」といった実務でも役立つ使い方を紹介します。

 

2. Pythonで日付や時刻の差分を計算する基本

datetimeモジュールのtimedeltaとは?

Pythonでは、datetimeモジュールのtimedeltaオブジェクトを使うことで、2つのdatetime(またはdate)の差分を簡単に求められます。

from datetime import datetime

# 日付を2つ作成
date1 = datetime(2025, 7, 24, 12, 0, 0)
date2 = datetime(2025, 7, 20, 8, 30, 0)

# 差分を計算
diff = date1 - date2

print(diff)
print("日数:", diff.days)
print("秒数:", diff.total_seconds())

実行結果:

4 days, 3:30:00
日数: 4
秒数: 355800.0

このように、差分はtimedeltaオブジェクトとして返され、「何日」「何秒」という形で扱うことができます。

timedeltaオブジェクトの中身

timedeltaは以下のような情報を持っています:

  • days: 差分の「日」
  • seconds: 「日」を除いた秒数
  • total_seconds(): 全体の差分を秒で取得
from datetime import timedelta

# 例として3日と5時間の差を表すtimedeltaを作成
td = timedelta(days=3, hours=5)

print("日数:", td.days)
print("秒数:", td.seconds)
print("合計秒数:", td.total_seconds())

実行結果:

日数: 3
秒数: 18000
合計秒数: 273000.0

 

3. よくある使い方・応用例

ある日時からn日後・n日前を求める

未来の日付や過去の日付を求めるには、timedeltaを加算・減算します。

from datetime import datetime, timedelta

today = datetime.today()

# 3日後
three_days_later = today + timedelta(days=3)
# 7日前
seven_days_ago = today - timedelta(days=7)

print("今日:", today)
print("3日後:", three_days_later)
print("7日前:", seven_days_ago)

実行結果:

今日: 2025-07-24 10:00:00(例)
3日後: 2025-07-27 10:00:00
7日前: 2025-07-17 10:00:00

時間単位の差分(時・分・秒)

timedeltaは時間単位でも差分を指定できます。

from datetime import datetime, timedelta

now = datetime.now()
after_90_min = now + timedelta(minutes=90)

print("現在:", now)
print("90分後:", after_90_min)

実行結果:

現在: 2025-07-24 10:00:00(例)
90分後: 2025-07-24 11:30:00

ログ処理での利用例:処理時間の測定

処理の開始と終了を記録して、所要時間を計測できます。

import time
from datetime import datetime

start = datetime.now()

# 処理(例として2秒待つ)
time.sleep(2)

end = datetime.now()

duration = end - start
print("処理時間:", duration.total_seconds(), "秒")

実行結果:

処理時間: 2.002345 秒

 

4. 注意点・エラー対策

型の違いによるエラー

date型とdatetime型は互換性がないため、型を揃えてから差分を計算しましょう。

from datetime import date, datetime

d1 = date.today()
d2 = datetime.now()

# 以下はエラーになる(date型とdatetime型の引き算)
# diff = d2 - d1  # TypeError

# 対策:どちらかを揃える
diff = d2 - datetime.combine(d1, datetime.min.time())
print(diff)

実行結果:

※実行環境により異なりますが、数時間分のtimedeltaが表示されます

タイムゾーンの違い

datetimetzinfoが設定されている場合、異なるタイムゾーン同士の差分は計算できません。
pytzzoneinfoモジュールを使って明示的にタイムゾーンを指定しましょう。

 

5. まとめ

本記事では、Pythonで日付や時刻の差分を計算する方法について詳しく解説しました。
datetimeモジュールとtimedeltaを活用すれば、日数の差や処理時間の計測、未来や過去の日時の算出が簡単に行えます。

  • datetime - datetime で差分(timedelta)を得られる
  • timedelta.days, .total_seconds()などで数値として扱える
  • 加減算も可能なので未来日・過去日を簡単に取得できる

実務では、ログ分析、タスク管理、処理時間の計測などさまざまなシーンで活用できます。
「日付差分」はPython学習者にとって必須の知識。ぜひ手を動かして、実際に差分を計算してみてください!

タイトルとURLをコピーしました