Pythonで「ある月が何日まであるか(28日, 30日, 31日)」や「うるう年かどうか」を判定するには、標準ライブラリ calendar モジュールの monthrange() 関数を使用するのが最も確実です。
これを使えば、自分で「西向く士(にしむくさむらい)」やうるう年の計算ロジックを実装する必要はありません。
目次
実装例:2月の最終日を確認する
ここでは、2025年2月を対象に、その月の1日が何曜日で始まり、月全体で何日間あるか(最終日は何日か)を取得するコードを実装します。
ソースコード
import calendar
# 調査対象の年月
target_year = 2025
target_month = 2
# calendar.monthrange(年, 月) を実行
# 戻り値は (1日の曜日インデックス, その月の日数) のタプルです
# 曜日インデックス: 0=月曜日, ... 6=日曜日
weekday_index, last_day = calendar.monthrange(target_year, target_month)
print(f"対象: {target_year}年 {target_month}月")
print("-" * 30)
# 結果の出力
print(f"1日の曜日 : {weekday_index} (0:月曜 - 6:日曜)")
print(f"月の日数 : {last_day} 日")
print(f"月末日 : {target_year}/{target_month}/{last_day}")
実行結果
対象: 2025年 2月
------------------------------
1日の曜日 : 5 (0:月曜 - 6:日曜)
月の日数 : 28 日
月末日 : 2025/2/28
解説
calendar.monthrange(year, month)
この関数は、指定された年・月のカレンダー情報を計算し、以下の2つの値をタプルで返します。
- 第1戻り値(曜日): その月の1日が何曜日かを示す整数(0が月曜日、6が日曜日)。
- 第2戻り値(日数): その月が何日間あるか(=月末の日付)。
うるう年の自動判定
monthrange は指定された year がうるう年であるかも自動的に判定します。 例えば、上記コードの target_year を 2024(うるう年)に変更すると、日数は自動的に 29 と返されます。月末の処理や支払い期限の計算などで非常に重宝する関数です。
