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ヶ月前」を表現できます。days
や years
も組み合わせ可能です。
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は標準ライブラリではない
relativedelta
は python-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
をぜひ使いこなしてください!