【超基本】Pythonで日時を加算・減算する方法|datetime×timedeltaで未来・過去の日時を簡単操作!

python

「今日から3日後の日付を知りたい」
「ある時刻から2時間引いた時刻を計算したい」

このような日時の計算は、プログラムでよく使われます。Pythonでは、datetimeモジュールとtimedeltaクラスを使うことで、このような計算がとても簡単にできます。

この記事では、Pythonで日付や時刻の加算・減算を行う方法を、初心者の方にもわかりやすく解説します。

スポンサーリンク

必要なモジュールを読み込む

最初に、日時を扱うために必要なモジュールを読み込みます。

from datetime import datetime, timedelta
  • datetime:日付と時刻を扱うクラス
  • timedelta:時間の差分(期間)を表すクラス

現在の日時を取得する

まずは基本として、現在の日時を取得してみましょう。

now = datetime.now()
print(now)

実行結果の例:

2025-06-02 15:30:45.123456

このnowという変数に現在の日時が入ります。

日時に時間を加算する方法

日数を加算する

今日から1日後(明日)の日時を計算してみます。

tomorrow = now + timedelta(days=1)
print(tomorrow)

実行結果の例:

2025-06-03 15:30:45.123456

時間を加算する

現在の時刻から3時間後を計算します。

three_hours_later = now + timedelta(hours=3)
print(three_hours_later)

実行結果の例:

2025-06-02 18:30:45.123456

分を加算する

10分後の時刻を計算します。

ten_minutes_later = now + timedelta(minutes=10)
print(ten_minutes_later)

複数の単位を同時に加算する

日数、時間、分を組み合わせて計算することもできます。

future_time = now + timedelta(days=2, hours=5, minutes=30)
print(future_time)

この例では、「現在時刻から2日5時間30分後」を計算しています。

timedeltaで使える単位

timedeltaでは以下の単位が使えます:

単位パラメータ名
daystimedelta(days=7)
secondstimedelta(seconds=30)
マイクロ秒microsecondstimedelta(microseconds=1000)
ミリ秒millisecondstimedelta(milliseconds=500)
minutestimedelta(minutes=15)
時間hourstimedelta(hours=2)
weekstimedelta(weeks=1)

日時から時間を減算する方法

日数を減算する

今日から1日前(昨日)の日時を計算します。

yesterday = now - timedelta(days=1)
print(yesterday)

時間を減算する

現在の時刻から30分前を計算します。

thirty_minutes_ago = now - timedelta(minutes=30)
print(thirty_minutes_ago)

週を減算する

1週間前の日時を計算します。

last_week = now - timedelta(weeks=1)
print(last_week)

日時の差分を計算する

2つの日時の差を計算することもできます。

基本的な差分計算

start_date = datetime(2025, 6, 1, 10, 0, 0)  # 2025年6月1日 10:00:00
end_date = datetime(2025, 6, 5, 15, 30, 0)   # 2025年6月5日 15:30:00

difference = end_date - start_date
print(difference)

実行結果:

4 days, 5:30:00

差分の詳細を取得する

print(f"日数: {difference.days}")
print(f"秒数: {difference.seconds}")
print(f"合計秒数: {difference.total_seconds()}")

実行結果:

日数: 4
秒数: 19800
合計秒数: 365400.0

実用的な使用例

有効期限を設定する

パスワードの有効期限を30日後に設定する例:

password_created = datetime.now()
expiry_date = password_created + timedelta(days=30)

print(f"パスワード作成日: {password_created.strftime('%Y-%m-%d')}")
print(f"有効期限: {expiry_date.strftime('%Y-%m-%d')}")

営業時間の計算

営業開始時刻から8時間後の終了時刻を計算:

business_start = datetime(2025, 6, 2, 9, 0, 0)  # 9:00
business_end = business_start + timedelta(hours=8)

print(f"営業開始: {business_start.strftime('%H:%M')}")
print(f"営業終了: {business_end.strftime('%H:%M')}")

年齢の計算

生年月日から現在の年齢を計算:

birth_date = datetime(1990, 3, 15)
today = datetime.now()
age_delta = today - birth_date

age_years = age_delta.days // 365
print(f"年齢: 約{age_years}歳")

締切日までの残り日数

deadline = datetime(2025, 7, 1)
today = datetime.now()
remaining = deadline - today

if remaining.days > 0:
    print(f"締切まで残り{remaining.days}日")
else:
    print("締切を過ぎています")

日時の表示形式を変更する

計算した日時を見やすい形式で表示したいときは、strftime()メソッドを使います。

future_date = datetime.now() + timedelta(days=7)

# いろいろな形式で表示
print(future_date.strftime("%Y-%m-%d"))          # 2025-06-09
print(future_date.strftime("%Y年%m月%d日"))        # 2025年06月09日
print(future_date.strftime("%m/%d/%Y"))          # 06/09/2025
print(future_date.strftime("%H:%M:%S"))          # 15:30:45

よく使う表示形式

形式コード
年-月-日%Y-%m-%d2025-06-02
時:分:秒%H:%M:%S15:30:45
月/日/年%m/%d/%Y06/02/2025
曜日%AMonday
月名%BJune

よくある使い方のパターン

n日後の日付を求める関数

def get_future_date(days):
    """指定した日数後の日付を返す"""
    future = datetime.now() + timedelta(days=days)
    return future.strftime("%Y-%m-%d")

print(get_future_date(7))   # 7日後
print(get_future_date(30))  # 30日後

期間内かどうかを判定する

def is_within_period(target_date, start_date, end_date):
    """指定した日付が期間内にあるかを判定"""
    return start_date <= target_date <= end_date

start = datetime(2025, 6, 1)
end = datetime(2025, 6, 30)
target = datetime(2025, 6, 15)

if is_within_period(target, start, end):
    print("期間内です")
else:
    print("期間外です")

時間の経過を測定する

import time

start_time = datetime.now()
print("処理開始...")

# 何かの処理(ここでは3秒待機)
time.sleep(3)

end_time = datetime.now()
elapsed = end_time - start_time

print(f"処理時間: {elapsed.total_seconds():.2f}秒")

注意すべきポイント

うるう年の考慮

timedeltaを使った計算では、うるう年も自動的に考慮されます。

# うるう年の2月28日から1日後
leap_year_date = datetime(2024, 2, 28)
next_day = leap_year_date + timedelta(days=1)
print(next_day)  # 2024-02-29(うるう日)

月末日の計算

月をまたぐ計算では、月末日の違いに注意が必要です。

# 1月31日から1か月後を計算したい場合
jan_31 = datetime(2025, 1, 31)
# timedelta(days=30) だと3月2日になってしまう

# 正確に1か月後を求めるには別の方法が必要

月単位の計算には、dateutilライブラリのrelativedeltaを使うと便利です。

まとめ

Pythonのdatetimetimedeltaを使うことで、日時の加算・減算が簡単に行えます。

重要なポイント

  • 加算:datetime + timedelta
  • 減算:datetime - timedelta
  • 差分:datetime - datetime(結果はtimedelta
  • 表示形式:strftime()で自由に変更可能

よく使うパターン

操作コード例
現在日時取得datetime.now()
n日後datetime.now() + timedelta(days=n)
n時間前datetime.now() - timedelta(hours=n)
日付の差分date1 - date2
見やすい表示date.strftime("%Y-%m-%d")

コメント

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