Python|月末の日付を取得する:calendar.monthrange()

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力を着実に高める第一歩です。

タイトルとURLをコピーしました