Python|1ヶ月後や1ヶ月前の日付を取得する

1. はじめに

Pythonで日付を扱う際、「1ヶ月後」や「1ヶ月前」の日付を取得したい場面はよくあります。例えば、請求日や締切日を計算したり、過去のデータを集計したりするケースです。

本記事では、Python初心者〜中級者を対象に、「Python|1ヶ月後や1ヶ月前の日付を取得する」方法について、わかりやすく丁寧に解説します。標準ライブラリの datetime モジュールでは対応が難しい「月単位の加減算」を、外部ライブラリ dateutil を使ってスマートに解決します。

日付操作は実務でも頻出するテーマなので、ぜひ使い方をマスターして、業務や学習に役立ててください!

 

2. relativedeltaを使った1ヶ月後・1ヶ月前の取得方法

2.1 datetimeだけでは「月」の加減算が難しい

Pythonの標準ライブラリ datetime.timedelta は「日」「秒」などの加減算には便利ですが、「月」は日数が可変なため非対応です。

そこで役立つのが、dateutil ライブラリの relativedelta クラスです。

2.2 dateutilとrelativedeltaの基本

dateutil はPythonで日付操作を便利にする拡張ライブラリで、pip install python-dateutil でインストール可能です。

以下は基本的な使い方です。

from datetime import datetime
from dateutil.relativedelta import relativedelta

# 現在の日付を取得
today = datetime.today()

# 1ヶ月後の日付を計算
one_month_later = today + relativedelta(months=1)

# 1ヶ月前の日付を計算
one_month_ago = today - relativedelta(months=1)

# 結果を表示
print("今日の日付:", today.strftime('%Y-%m-%d'))
print("1ヶ月後:", one_month_later.strftime('%Y-%m-%d'))
print("1ヶ月前:", one_month_ago.strftime('%Y-%m-%d'))

実行結果:

今日の日付:2025-07-24
1ヶ月後:2025-08-24
1ヶ月前:2025-06-24

2.3 relativedeltaの便利な書き方

relativedelta(months=±1) で柔軟に「1ヶ月後」「1ヶ月前」を表現できます。daysyears も組み合わせ可能です。

 

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

3.1 月末処理や定期実行のスケジューリング

例えば、毎月の請求書発行日を「1ヶ月後の月末」に設定する場合は以下のように書けます。

from dateutil.relativedelta import relativedelta
from datetime import datetime

# 今日の日付
today = datetime.today()

# 次の月末を取得(1ヶ月後の1日にして、そこから1日戻す)
next_month_end = (today + relativedelta(months=1, day=1)) - relativedelta(days=1)

print("次の月末は:", next_month_end.strftime('%Y-%m-%d'))

実行結果:

次の月末は:2025-08-31

3.2 定期バックアップのローテーション

ログファイルやバックアップファイルの保存期間を「1ヶ月前以前で削除する」といった処理も可能です。

import os
from datetime import datetime
from dateutil.relativedelta import relativedelta

# 基準日(1ヶ月前)
limit_date = datetime.today() - relativedelta(months=1)

# ファイルの更新日がlimit_dateより古いかチェック(例)
file_mtime = datetime.fromtimestamp(os.path.getmtime("example.log"))

if file_mtime < limit_date:
    print("このファイルは1ヶ月以上前に更新されました。削除対象です。")

3.3 ユーザー登録日の経過月数チェック

ユーザー登録日から1ヶ月が経過しているかをチェックする処理も可能です。

from datetime import datetime
from dateutil.relativedelta import relativedelta

# 登録日(例)
signup_date = datetime(2025, 6, 10)

# 1ヶ月経過したかどうか
if datetime.today() >= signup_date + relativedelta(months=1):
    print("1ヶ月以上経過しています。リマインド通知を送ります。")

 

4. 注意点・エラー対策

4.1 dateutilは標準ライブラリではない

relativedeltapython-dateutil に含まれているため、以下のコマンドで事前にインストールしておく必要があります。

pip install python-dateutil

4.2 月末処理のずれに注意

月末に「1ヶ月後」を加算すると、翌月の日数によって結果がずれる場合があります。例:

  • 2025-01-31 に1ヶ月加算 → 2025-02-28(2月は28日)

このようなケースでは意図と異なる日付になるため、必要なら day=31 などで固定値にする工夫が必要です。

4.3 曜日や営業日を考慮する場合は別対策

祝日や土日を除いた「営業日ベースの1ヶ月後」は、pandas.tseries.offsets を使ったり、自作ロジックで対応する必要があります。

 

5. まとめ

本記事では、「Python|1ヶ月後や1ヶ月前の日付を取得する」方法として、dateutil.relativedelta の使い方を中心に解説しました。

  • datetime.timedelta では扱えない「月」単位の加減算が可能
  • 実務でよくある「月末処理」「保存期間チェック」「1ヶ月経過確認」などにも活用可能
  • 曜日ずれや月末処理の落とし穴には注意が必要

✅ 実務では、スケジューラー・通知・ファイル整理など多くの場面で役立つ知識です。Pythonの日付操作の幅を広げる一歩として、relativedelta をぜひ使いこなしてください!

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