
Pythonで日付の計算をしたいとき、「1か月後」や「3年後」「2週間前」などの柔軟な日付操作をしたくなる場面はよくあります。
そんなときに活躍するのが、dateutil
モジュールの relativedelta
です。
この記事では、relativedelta(months=1)
の意味と基本的な使い方を、具体例とともにわかりやすく解説します。
relativedeltaとは?
relativedelta
は、Pythonの外部ライブラリ dateutil
に含まれている、日付の差(=delta)を表すための機能です。
標準ライブラリ datetime.timedelta
と似ていますが、relativedelta
は 月や年などの「カレンダー単位」での加算・減算ができるのが大きな特徴です。
relativedelta(months=1)
は「1か月分の差」を意味します。
これを日付と組み合わせて、「1か月後」や「1か月前」の日付を求めることができます。
基本的な使い方:1か月後の日付を求める
まずは最も基本的な使い方である、「今日から1か月後の日付を求める」例です。
1 2 3 4 5 6 7 8 9 | from datetime import date from dateutil.relativedelta import relativedelta today = date.today() one_month_later = today + relativedelta(months=1) print(f"今日:{today}") print(f"1か月後:{one_month_later}") |
例えば今日が 2025-06-18
の場合、実行結果は:
1 2 3 | 今日:2025-06-18 1か月後:2025-07-18 |
このように、月単位で日付を加算してくれます。
年をまたぐ計算も問題なし
「12月の1か月後」など、年をまたぐ場合も正しく計算できます。
1 2 3 4 5 6 7 8 | from datetime import date from dateutil.relativedelta import relativedelta dt = date(2025, 12, 25) next_month = dt + relativedelta(months=1) print(f"{dt} の1か月後 → {next_month}") |
出力:
1 2 | 2025-12-25 の1か月後 → 2026-01-25 |
月が繰り上がって年が増えるケースでも、きちんと計算してくれます。
1か月前の日付を求める
逆に、1か月前の日付を求めたいときは months=-1
を使います。
1 2 3 4 5 6 7 8 | from datetime import date from dateutil.relativedelta import relativedelta dt = date(2025, 3, 1) one_month_ago = dt + relativedelta(months=-1) print(f"{dt} の1か月前 → {one_month_ago}") |
出力:
1 2 | 2025-03-01 の1か月前 → 2025-02-01 |
日付の方向(未来か過去か)は、months
に渡す数値の正負で調整します。
月末処理も簡単
月末日をまたぐ場合も relativedelta
は問題なく処理してくれます。
例えば「1月31日の1か月後」を求めてみましょう。
1 2 3 4 5 6 7 8 | from datetime import date from dateutil.relativedelta import relativedelta dt = date(2025, 1, 31) next_month = dt + relativedelta(months=1) print(f"{dt} の1か月後 → {next_month}") |
出力:
1 2 | 2025-01-31 の1か月後 → 2025-02-28 |
2月には31日がないため、自動的に**月末(2月28日)**に調整されます。
こうした「カレンダー上の自然な調整」ができるのが、relativedelta
の最大の魅力です。
他の単位との組み合わせも自由
relativedelta
では、月だけでなく「年・日・週・時間」など複数の単位を同時に使えます。
例えば「3年2か月と10日後」なども簡単に指定できます。
1 2 3 4 5 6 7 8 | from datetime import date from dateutil.relativedelta import relativedelta dt = date(2025, 6, 1) future = dt + relativedelta(years=3, months=2, days=10) print(f"{dt} の3年2か月10日後 → {future}") |
出力:
1 2 | 2025-06-01 の3年2か月10日後 → 2028-08-11 |
このように、細かい日付操作を1行で書けるのも relativedelta
の大きな強みです。
relativedeltaとtimedeltaの違い
Python標準の timedelta
は日数や秒数単位での操作は得意ですが、月や年といった単位には非対応です。
機能 | timedelta | relativedelta |
---|---|---|
日単位 | ○ | ○ |
秒・分単位 | ○ | ○ |
月・年単位 | × | ○ |
カレンダーの調整(末日対応など) | × | ○ |
「○月○日から1か月後」のような日付操作が必要な場面では、relativedeltaを選ぶべきです。
まとめ
relativedelta(months=1)
は「1か月後」の日付差を表すrelativedelta
はdateutil
モジュールに含まれる便利な日付操作ツール- 月や年単位、月末の調整も自動で行ってくれる
months=-1
で過去の日付も簡単に取得できるtimedelta
ではできない月・年単位の処理が可能
日付の足し引きをカレンダー感覚で行いたいとき、relativedelta
はとても強力なツールです。
データ加工やレポート日付の自動計算など、実務でも活躍する場面が多いので、ぜひ覚えておきましょう。