1. はじめに
Pythonで月末の日付を取得したいと考えたことはありませんか?
日付処理は、請求書の締め日やレポートの集計期間など、業務でも頻繁に登場する重要な操作です。本記事では、Pythonの標準ライブラリcalendar
を使って月末の日付を取得する方法を解説します。
特に、calendar.monthrange()
関数はとても便利で、指定した年と月の「1日が何曜日か」と「その月の最終日(末日)が何日か」を同時に取得できます。
この記事では、初心者の方にも分かりやすく、具体的なコード例とその出力結果を交えながら、月末の日付の取得方法を丁寧に解説していきます。
2. Pythonで月末の日付を取得する基本:calendar.monthrange()
2-1. calendar.monthrange()の基本構文
calendar.monthrange()
は、指定した年・月に関する2つの情報をタプルで返してくれる便利な関数です。
- 第1要素:月初日の曜日(0=月曜, 6=日曜)
- 第2要素:その月の最終日(末日)
まずは基本的な使い方を見てみましょう。
import calendar
# 2025年7月の月末日を取得
_, last_day = calendar.monthrange(2025, 7)
print(f"2025年7月の月末は {last_day} 日です")
実行結果:
2025年7月の月末は 31 日です
2-2. 曜日も含めて取得する
monthrange()
は、実は月初日の曜日も一緒に取得できます。曜日も知りたい場合は次のように書きます。
import calendar
first_weekday, last_day = calendar.monthrange(2025, 2)
print(f"2025年2月の1日は {first_weekday}(0=月曜)")
print(f"2025年2月の月末は {last_day} 日です")
実行結果:
2025年2月の1日は 5(0=月曜)
2025年2月の月末は 28 日です
このように、曜日情報も一緒に得られるため、スケジュール管理やカレンダー生成にも便利です。
3. よくある使い方・応用例
3-1. 今日が属する月の月末を取得する
業務で「今月の締め日」などを知りたい場面では、現在日付からその月末日を求めるケースが多いです。
import calendar
from datetime import datetime
# 今日の年月を取得
today = datetime.today()
year = today.year
month = today.month
# 月末日を取得
_, last_day = calendar.monthrange(year, month)
print(f"今月({year}年{month}月)の月末は {last_day} 日です")
実行結果:
今月(2025年7月)の月末は 31 日です
3-2. 日付型(datetime)として月末日を得る
最終日を数値ではなく、datetime.date
として使いたい場合は、以下のようにします。
import calendar
from datetime import date
# 任意の年月
year = 2024
month = 2
# 最終日をdatetime.dateで作成
_, last_day = calendar.monthrange(year, month)
last_date = date(year, month, last_day)
print("月末の日付オブジェクト:", last_date)
実行結果:
月末の日付オブジェクト: 2024-02-29
この方法は、データベースのフィルターや日付範囲での検索などで非常に便利です。
3-3. 12ヶ月分の月末を一気にリストアップ
年間レポートや請求業務などで、全月の末日一覧が欲しい場合もあるでしょう。以下のようにループを使えば簡単です。
import calendar
year = 2025
for month in range(1, 13):
_, last_day = calendar.monthrange(year, month)
print(f"{year}年{month}月の月末は {last_day} 日")
実行結果:
2025年1月の月末は 31 日
2025年2月の月末は 28 日
2025年3月の月末は 31 日
...
2025年12月の月末は 31 日
4. 注意点・エラー対策
4-1. 月の値が不正だとエラーになる
monthrange()
では、1〜12以外の月を指定するとcalendar.IllegalMonthError
が発生します。
import calendar
# 存在しない13月
try:
calendar.monthrange(2025, 13)
except Exception as e:
print("エラーが発生しました:", e)
実行結果:
エラーが発生しました: bad month number 13; must be 1-12
このような場合は、事前に1〜12の範囲かをチェックするのが安全です。
4-2. 日付オブジェクトに変換するときの注意
取得した末日をdatetime.date
などに変換する際、引数の順番(年, 月, 日)を間違えると意図しない日付になるので注意が必要です。
5. まとめ
今回は、calendar.monthrange()
を使ってPythonで月末の日付を取得する方法を詳しく解説しました。
monthrange()
で「月初の曜日」と「月末の日数」が取得できるdatetime
と組み合わせれば日付オブジェクトにも変換可能- 業務での締め日処理、月次集計、カレンダー作成などに応用できる
実務で使える日付操作のスキルは、システム開発やデータ分析でも役立ちます。Python学習の中でも非常に汎用性の高いテクニックなので、ぜひ使いこなしてみてください。
学習のコツ: 日付の操作は最初はややこしく見えますが、標準ライブラリだけでかなりのことができます。標準関数に慣れることが、Python力を着実に高める第一歩です。