1. はじめに|日付やカレンダー処理って意外とややこしい?
Pythonで日付計算やカレンダー操作をしようとして、こんなことで悩んだことはありませんか?
「Pythonで◯日後の日付を計算したいだけなのに、コードが意外とややこしい…」
「月末が何日かを自動で判定したいけど、うるう年の扱いが不安…」
実は、Pythonの日付処理は想像以上に落とし穴が多い分野です。
標準ライブラリの datetime だけでも基本的な操作はできますが、
- 「1か月後」「1年前」といった年月単位の計算
- 月末・曜日・カレンダー構造を考慮した処理
になると、一気にコードが複雑になりがちです。
そこで本記事では、Pythonの日付計算・カレンダー操作を劇的にシンプルにする2つの定番モジュールを紹介します。
- 📅 dateutil.relativedelta:
「◯日後」「◯か月前」「◯年後」を直感的に計算できる - 📆 calendar:
月末日・曜日・カレンダー情報を正確に扱える標準ライブラリ
この2つを組み合わせることで、
予定管理ツール・リマインダー・スケジュール自動生成など、実務でよくある日付処理が一気に楽になります。
この記事では、
「何ができるのか」「どんな場面で使うべきか」「具体的にどう書くのか」を、
初心者でもつまずかないよう コード例つきでやさしく解説していきます。
それでは、Pythonで日付計算をスッキリ書く方法を見ていきましょう。
2. dateutil.relativedeltaモジュールの使い方
relativedeltaってなに?
Pythonで「今日から1か月後の日付を知りたい」と思っても、標準のdatetimeモジュールだけではちょっと難しいんです。
そんなときに便利なのが **relativedelta(リレイティブ・デルタ)**というモジュール!
これを使えば、「何日後」「何か月前」「何年後」みたいな相対的な日付の計算がとってもカンタンになります。
relativedeltaを使う準備
このモジュールはPythonに最初から入っていないので、まずはインストールが必要です。
pip install python-dateutil
そのあと、Pythonコードの最初に以下を追加しましょう:
from datetime import datetime
from dateutil.relativedelta import relativedelta
使い方の基本:今から1か月後を求めるには?
from datetime import datetime
from dateutil.relativedelta import relativedelta
today = datetime.now()
one_month_later = today + relativedelta(months=1)
print("今日:", today)
print("1か月後:", one_month_later)
とってもシンプルですよね!relativedelta(months=1)と書くだけで、1か月後が求められます。
ほかにもいろいろ計算できるよ!
| 計算したいこと | 書き方例 |
|---|---|
| 7日後 | relativedelta(days=7) |
| 1年前 | relativedelta(years=-1) |
| 2時間後 | relativedelta(hours=2) |
| 15分前 | relativedelta(minutes=-15) |
+ を使えば未来へ、- を使えば過去へ移動できます!
フォーマットを変えて表示してみよう!
日付を「2025年06月13日」のように見やすく表示したいときは、strftime()という関数を使います。
print(one_month_later.strftime("%Y年%m月%d日"))
# 例:2025年07月13日
よく使うフォーマットコードはこちら👇
| 書式 | 意味 | 例 |
|---|---|---|
%Y | 西暦4桁 | 2025 |
%m | 月(2桁) | 06 |
%d | 日(2桁) | 13 |
%H | 時(24時間) | 14 |
%M | 分 | 05 |
%S | 秒 | 09 |

relativedeltaを使えば、カレンダーを見ながら電卓を叩く必要はもうありません。
Pythonコードの中でスッと日付の足し算・引き算ができるようになります!
3. calendarモジュールの使い方
calendarってなに?
calendar(カレンダー)モジュールは、その名のとおり「カレンダー情報」を扱うためのモジュールです。
たとえば、次のようなことができちゃいます👇
- ある月のカレンダーを表示する
- 月末の日付(最終日)を調べる
- 月の最初の曜日を調べる
どれも、スケジュールアプリや日付の自動計算を作るときにめちゃくちゃ便利です!
使うための準備
これはPythonの標準モジュールなので、インストールは不要です!
すぐに使えます。
import calendar
ある月のカレンダーを表示してみよう
import calendar
print(calendar.month(2025, 6))
このコードを実行すると、こんなカレンダーが表示されます👇
June 2025
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
英語表記ですが、見た目はまるで本物のカレンダーみたいですよね!
月末の日付(最終日)を調べたいときは?
Pythonで「この月って何日まであるの?」という処理を自分で書こうとすると、
2月(28日 or 29日)や4月(30日)など、ちょっとややこしい…。
でもご安心を!calendar.monthrange() を使えば一発です!
import calendar
_, last_day = calendar.monthrange(2025, 6)
print(f"2025年6月の月末は {last_day} 日です")
このコードでは、2025年6月の月末が「30日」だと教えてくれます!
calendar.monthrange()のちょっと詳しい説明
この関数は、2つの情報をタプル(セット)で返します。
calendar.monthrange(年, 月)
→ (その月の1日の曜日, その月の日数)
たとえば:
print(calendar.monthrange(2024, 2))
# 結果:(3, 29)
- 最初の「3」は 木曜日(0=月曜, 1=火曜…6=日曜)
- 次の「29」は その月の総日数(つまり2月はうるう年で29日まで!)
応用:月末まであと何日?
日付モジュールと組み合わせれば、こんなこともできます!
from datetime import datetime
import calendar
today = datetime.now()
_, last_day = calendar.monthrange(today.year, today.month)
days_left = last_day - today.day
print(f"今月の残り日数:{days_left} 日")

calendarモジュールを使えば、手間のかかる月末処理やカレンダー表示がサクッと書けちゃいます!
うるう年の計算も自動でやってくれるので、安心&時短です💡
4. 実践Tips|日付を加算→文字列変換→月末確認までの流れ
ここまでで、「日付の加算」にはrelativedelta、「月末の日付確認」にはcalendarを使えることが分かりましたよね。
じゃあ今度は、この2つを実際に組み合わせて使ってみましょう!
✅ 目標:今日から1か月後の日付を表示して、 その月の末日は何日かも調べる!
from datetime import datetime
from dateutil.relativedelta import relativedelta
import calendar
# 今日の日付を取得
today = datetime.now()
print("今日:", today.strftime("%Y年%m月%d日"))
# 今日から1か月後の日付を計算
next_month = today + relativedelta(months=1)
print("1か月後:", next_month.strftime("%Y年%m月%d日"))
# その月の末日を取得
_, last_day = calendar.monthrange(next_month.year, next_month.month)
print(f"{next_month.year}年{next_month.month}月の月末は {last_day} 日です")
▶ 実行結果のイメージ(2025年6月13日の場合)
今日:2025年06月13日
1か月後:2025年07月13日
2025年7月の月末は 31 日です
📝 解説ポイントまとめ
| 操作 | 使用したモジュール | 解説 |
|---|---|---|
| 現在日時の取得 | datetime.now() | 標準のdatetimeで今の時刻を取得 |
| 日付の加算 | relativedelta(months=1) | 1か月後を計算できる!日数のずれも自動調整 |
| 日付の表示形式変更 | .strftime() | 人が見やすい「YYYY年MM月DD日」などの形に変換 |
| 月末日取得 | calendar.monthrange() | 年と月を指定すると、その月の総日数がわかる! |
✅ ちょっと応用編:毎月の請求書日を自動で表示したい!
例えば「今日から3か月分の請求日(各月の末日)を出したい」ときも、この方法でサクッと作れます!
for i in range(3):
future_date = today + relativedelta(months=i)
_, last_day = calendar.monthrange(future_date.year, future_date.month)
print(f"{future_date.year}年{future_date.month}月の請求日は {last_day} 日です")

このように、dateutil.relativedeltaとcalendarを組み合わせることで、
日付の加算・月末チェック・カレンダー表示がぜんぶできちゃいます!
業務ツールやアプリでよくある「自動計算」「スケジュール生成」も、これらを使えばとても簡単になりますよ。
5. まとめ|日付操作が劇的に楽になる2つのモジュール
今回の記事では、Pythonで日付やカレンダーを扱うときにとっても便利な2つのモジュールをご紹介しました。
🛠 今回使ったモジュールのおさらい
✅ dateutil.relativedelta
- 「○日後」「○か月前」など、相対的な日付の計算ができる
timedeltaでは扱いにくい「月」や「年」単位の加算・減算も自由自在datetimeオブジェクトに足し算・引き算するだけで使える
✅ calendar
- 指定した年と月のカレンダー表示ができる
monthrange()で月末日(最終日)や曜日が一発でわかる- うるう年の処理なども自動で対応してくれるから安心
🤖 実際にどんな場面で使える?
- スケジュール管理アプリの作成
- 毎月の請求書・レポートの締め日を自動計算
- 「30日後のリマインダー通知」などの自動処理
- 日付の形式をきれいに整えて画面に表示 などなど!

Pythonで日付を扱うとき、最初はちょっとややこしく感じるかもしれません。
でも、今回のように便利なモジュールを使いこなせば、あっという間に日付計算がプロ並みになります!
これをきっかけに、ぜひ他の日時関連のモジュールやテクニックにも挑戦してみてくださいね 😊
あわせて読みたい
📅 Pythonで日付や時間をもっと自由に扱いたいならこちらもおすすめ!
▶ 【Python入門】日付・時間・タイムゾーンの基本と使い方をわかりやすく解説!
Pythonのdatetimeモジュールを使った基本的な日付・時間の操作方法から、タイムゾーン対応まで、初心者向けにやさしく解説しています。今回の記事と合わせて読むことで、日付・時間の処理がまるっと理解できるようになりますよ!
よくある質問(Q&A)
- Q
relativedeltaとtimedeltaってどう違うの? - A
relativedeltaは「月」や「年」単位の加減算ができるのがポイントです!
Pythonの標準datetime.timedeltaでは、日(days)や秒(seconds)は扱えますが、「1か月後」や「1年後」のような計算はできません。
一方で、dateutil.relativedeltaを使えば、こういったカレンダーに沿った加減算がラクにできます!
- Q
calendar.monthrange()ってなぜ曜日も返すの? - A
月の「1日が何曜日か」を知ることで、**カレンダー表示やスケジュール生成に役立つからです。
例えば「その月の1日が土曜日なら、翌週から平日スケジュール開始」などの判定ができます。
ちなみに戻り値(3, 31)のような「3」は曜日を数字で表していて、0が月曜・6が日曜となっています。
- Q
calendarで祝日は扱えますか? - A
残念ながら、標準の
calendarモジュールでは祝日は扱えません。
日本の祝日を取得したい場合は、jpholidayという外部ライブラリを使うのがおすすめです。pip install jpholidayこのように組み合わせて使うと、休日を除外した業務日数の計算などもできるようになります!







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。