Pythonで月の日数を取得する方法!初心者でもわかるcalendar.monthrangeの使い方
生徒
「Pythonで、ある月に何日あるのかを調べたいんですが、どうすればいいんですか?」
先生
「Pythonではcalendarモジュールのmonthrange()関数を使えば、簡単に特定の月の日数がわかりますよ。」
生徒
「2月はうるう年とかあるし、手で計算すると間違えそうです……」
先生
「そのとおり!だからこそcalendar.monthrange()を使うと安全で便利なんです。一緒に学んでみましょう!」
1. calendar.monthrange()とは?
Python(パイソン)で月の日数を調べるには、calendar(カレンダー)モジュールに用意されているmonthrange()という関数を使います。
この関数は、指定した年と月を入力すると、「その月の1日が何曜日か」「その月が何日あるか」の2つを返してくれます。
2. calendarモジュールをインポートしよう
まずはcalendarモジュールを使う準備をします。Pythonに最初から入っている標準モジュールなので、特別なインストールは不要です。
import calendar
この1行で、カレンダー機能を使う準備が整いました。
3. 実際に月の日数を取得してみよう
では、実際に2025年2月が何日あるかを調べてみましょう。うるう年ではないので、28日になるはずです。
import calendar
year = 2025
month = 2
weekday, days = calendar.monthrange(year, month)
print(f"{year}年{month}月は{days}日あります。")
実行結果は以下のようになります。
2025年2月は28日あります。
ここで、weekdayには「その月の1日が何曜日か」が0〜6の数字で入っています。(0が月曜日、6が日曜日)
4. うるう年でも正しく日数が出るの?
はい、monthrange()はうるう年(例:2024年や2028年など)も正しく判定してくれます。たとえば、2024年2月の場合を見てみましょう。
import calendar
year = 2024
month = 2
_, days = calendar.monthrange(year, month)
print(f"{year}年{month}月は{days}日あります。")
2024年2月は29日あります。
このように、特別な処理を自分で書かなくても、うるう年も自動的に判定してくれるので安心です。
5. 月初の曜日を使って応用しよう
monthrange()のもうひとつの戻り値「月初の曜日」も便利です。たとえば、カレンダーのように曜日を表示したいときに使えます。
曜日の数字は以下のように割り当てられています:
- 0:月曜日(Monday)
- 1:火曜日(Tuesday)
- 2:水曜日(Wednesday)
- 3:木曜日(Thursday)
- 4:金曜日(Friday)
- 5:土曜日(Saturday)
- 6:日曜日(Sunday)
たとえば、2025年2月1日は土曜日なので、「5」が返ってきます。
6. 月ごとの日数をすべて表示する例
ここでは、1月から12月まで、それぞれ何日あるのかをまとめて表示するサンプルです。
import calendar
year = 2025
for month in range(1, 13):
_, days = calendar.monthrange(year, month)
print(f"{year}年{month}月は{days}日です。")
2025年1月は31日です。
2025年2月は28日です。
...
2025年12月は31日です。
このように、for文(繰り返し処理)を使うことで、カレンダー情報を一気に取得できます。
7. ユーザーから年と月を入力して日数を表示しよう
ユーザーが入力した年と月に対して、日数を調べる簡単なプログラムです。
import calendar
year = int(input("年を入力してください(例:2025):"))
month = int(input("月を入力してください(例:2):"))
_, days = calendar.monthrange(year, month)
print(f"{year}年{month}月は{days}日あります。")
このように、パソコン初心者でも簡単に使えるように、入力機能と組み合わせれば便利なツールになります。
8. よくあるエラーと注意点
最後に、初心者の方が間違えやすいポイントを紹介します。
- 月の指定が1〜12以外になるとエラーになります
→ たとえば「13」や「0」などは存在しない月なので、ValueErrorが発生します。 - 文字列のままではなく、整数(int型)で渡すこと
→ 入力値はint()で変換してからmonthrange()に渡しましょう。 - 曜日の数字は0〜6であることを覚えておこう
→ 月曜が0、日曜が6という順番は少し直感と違うかもしれませんが慣れましょう。
まとめ
Pythonで月の日数を取得するポイント総まとめ
Pythonで月の日数を取得する方法として、calendar.monthrange()は非常に実用的で信頼性の高い関数です。
年と月を指定するだけで、その月の「日数」と「月初の曜日」を同時に取得できるため、カレンダー処理や日付計算を行う際にとても役立ちます。
特に、うるう年の判定を自動で行ってくれる点は大きなメリットであり、複雑な条件分岐を自分で書く必要がありません。
初心者の方がつまずきやすいポイントとしては、月の指定範囲(1〜12)やデータ型の扱いがありますが、 これらを正しく理解すれば、シンプルかつ安全に日数を取得できます。 また、for文と組み合わせることで、1年分の月ごとの日数一覧を一括で取得することも可能です。
実務においては、予約システムや勤怠管理、カレンダーアプリなど、日付に関する処理は非常に多く存在します。
そのような場面でcalendar.monthrange()を活用することで、コードの可読性と保守性を高めることができます。
Python初心者だけでなく、実務でPythonを扱うエンジニアにとっても重要な知識と言えるでしょう。
サンプルプログラムで復習しよう
ここでは、学習内容を振り返るために、実際の現場でも使いやすい形でサンプルコードを整理します。 入力値のチェックや例外処理も含めて、より実践的な形にしています。
import calendar
def get_days_in_month(year, month):
if month < 1 or month > 12:
raise ValueError("月は1から12の範囲で指定してください")
_, days = calendar.monthrange(year, month)
return days
try:
year = int(input("年を入力してください:"))
month = int(input("月を入力してください:"))
days = get_days_in_month(year, month)
print(f"{year}年{month}月は{days}日あります。")
except ValueError as e:
print(f"入力エラー:{e}")
このように関数としてまとめておくことで、他のプログラムからも再利用しやすくなります。 エラー処理を追加することで、ユーザー入力による不正値にも柔軟に対応できるようになります。
応用的な使い方と活用シーン
calendar.monthrange()は単に日数を取得するだけでなく、月初の曜日を利用したカレンダー表示や、
日付計算ロジックの基礎としても活用できます。
例えば、特定の月の開始曜日を基にした表形式のカレンダー生成や、営業日計算などにも応用可能です。
また、Webアプリケーションや業務システムでは、日付の正確な処理が求められる場面が多いため、 このような標準ライブラリを活用することで、バグの少ない安定したシステムを構築することができます。
生徒
「calendar.monthrangeを使うと、月の日数が簡単にわかるんですね。うるう年も自動で判断してくれるのは便利だと思いました。」
先生
「そうですね。日付に関する処理は意外と複雑になりやすいので、標準ライブラリを活用するのが大切です。」
生徒
「月の最初の曜日も取得できるので、カレンダー表示にも応用できそうですね。」
先生
「その通りです。実務でもよく使う考え方なので、しっかり身につけておくと良いでしょう。」
生徒
「入力チェックや例外処理も一緒に書くことで、より実践的なプログラムになることも学べました。」
先生
「とても良い理解です。これからは、ただ動くだけでなく、安全で使いやすいコードを書くことも意識していきましょう。」