スポンサーリンク

Pythonで日付計算・カレンダー操作を簡単に!relativedeltaとcalendarの使い方ガイド

Python入門

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
%M05
%S09

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.relativedeltacalendarを組み合わせることで、
日付の加算・月末チェック・カレンダー表示がぜんぶできちゃいます!

業務ツールやアプリでよくある「自動計算」「スケジュール生成」も、これらを使えばとても簡単になりますよ。




5. まとめ|日付操作が劇的に楽になる2つのモジュール

今回の記事では、Pythonで日付やカレンダーを扱うときにとっても便利な2つのモジュールをご紹介しました。


🛠 今回使ったモジュールのおさらい

✅ dateutil.relativedelta

  • 「○日後」「○か月前」など、相対的な日付の計算ができる
  • timedeltaでは扱いにくい「月」や「年」単位の加算・減算も自由自在
  • datetimeオブジェクトに足し算・引き算するだけで使える

✅ calendar

  • 指定した年と月のカレンダー表示ができる
  • monthrange()月末日(最終日)や曜日が一発でわかる
  • うるう年の処理なども自動で対応してくれるから安心

🤖 実際にどんな場面で使える?

  • スケジュール管理アプリの作成
  • 毎月の請求書・レポートの締め日を自動計算
  • 「30日後のリマインダー通知」などの自動処理
  • 日付の形式をきれいに整えて画面に表示 などなど!

Pythonで日付を扱うとき、最初はちょっとややこしく感じるかもしれません。
でも、今回のように便利なモジュールを使いこなせば、あっという間に日付計算がプロ並みになります!

これをきっかけに、ぜひ他の日時関連のモジュールやテクニックにも挑戦してみてくださいね 😊


あわせて読みたい

📅 Pythonで日付や時間をもっと自由に扱いたいならこちらもおすすめ!
【Python入門】日付・時間・タイムゾーンの基本と使い方をわかりやすく解説!
Pythonのdatetimeモジュールを使った基本的な日付・時間の操作方法から、タイムゾーン対応まで、初心者向けにやさしく解説しています。今回の記事と合わせて読むことで、日付・時間の処理がまるっと理解できるようになりますよ!


よくある質問(Q&A)

Q
relativedeltatimedeltaってどう違うの?
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の商品ページをご確認ください。

スポンサーリンク