カテゴリ: Python 更新日: 2026/05/30

Pythonで月の日数を取得する方法!初心者でもわかるcalendar.monthrangeの使い方

Pythonで特定の年・月の日数を取得する方法(calendar.monthrange())
Pythonで特定の年・月の日数を取得する方法(calendar.monthrange())

先生と生徒の会話形式で理解しよう

生徒

「Pythonで、ある月に何日あるのかを調べたいんですが、どうすればいいんですか?」

先生

「Pythonではcalendarモジュールのmonthrange()関数を使えば、簡単に特定の月の日数がわかりますよ。」

生徒

「2月はうるう年とかあるし、手で計算すると間違えそうです……」

先生

「そのとおり!だからこそcalendar.monthrange()を使うと安全で便利なんです。一緒に学んでみましょう!」

1. calendar.monthrange()とは?

1. calendar.monthrange()とは?
1. calendar.monthrange()とは?

Python(パイソン)で月の日数を調べるには、calendar(カレンダー)モジュールに用意されているmonthrange()という関数を使います。

この関数は、指定した年と月を入力すると、「その月の1日が何曜日か」「その月が何日あるか」の2つを返してくれます。

2. calendarモジュールをインポートしよう

2. calendarモジュールをインポートしよう
2. calendarモジュールをインポートしよう

まずはcalendarモジュールを使う準備をします。Pythonに最初から入っている標準モジュールなので、特別なインストールは不要です。


import calendar

この1行で、カレンダー機能を使う準備が整いました。

3. 実際に月の日数を取得してみよう

3. 実際に月の日数を取得してみよう
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. うるう年でも正しく日数が出るの?

4. うるう年でも正しく日数が出るの?
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. 月初の曜日を使って応用しよう

5. 月初の曜日を使って応用しよう
5. 月初の曜日を使って応用しよう

monthrange()のもうひとつの戻り値「月初の曜日」も便利です。たとえば、カレンダーのように曜日を表示したいときに使えます。

曜日の数字は以下のように割り当てられています:

  • 0:月曜日(Monday)
  • 1:火曜日(Tuesday)
  • 2:水曜日(Wednesday)
  • 3:木曜日(Thursday)
  • 4:金曜日(Friday)
  • 5:土曜日(Saturday)
  • 6:日曜日(Sunday)

たとえば、2025年2月1日は土曜日なので、「5」が返ってきます。

6. 月ごとの日数をすべて表示する例

6. 月ごとの日数をすべて表示する例
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. ユーザーから年と月を入力して日数を表示しよう

7. ユーザーから年と月を入力して日数を表示しよう
7. ユーザーから年と月を入力して日数を表示しよう

ユーザーが入力した年と月に対して、日数を調べる簡単なプログラムです。


import calendar

year = int(input("年を入力してください(例:2025):"))
month = int(input("月を入力してください(例:2):"))

_, days = calendar.monthrange(year, month)
print(f"{year}年{month}月は{days}日あります。")

このように、パソコン初心者でも簡単に使えるように、入力機能と組み合わせれば便利なツールになります。

8. よくあるエラーと注意点

8. よくあるエラーと注意点
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を使うと、月の日数が簡単にわかるんですね。うるう年も自動で判断してくれるのは便利だと思いました。」

先生

「そうですね。日付に関する処理は意外と複雑になりやすいので、標準ライブラリを活用するのが大切です。」

生徒

「月の最初の曜日も取得できるので、カレンダー表示にも応用できそうですね。」

先生

「その通りです。実務でもよく使う考え方なので、しっかり身につけておくと良いでしょう。」

生徒

「入力チェックや例外処理も一緒に書くことで、より実践的なプログラムになることも学べました。」

先生

「とても良い理解です。これからは、ただ動くだけでなく、安全で使いやすいコードを書くことも意識していきましょう。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python の日時操作の記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.5
Java&Spring記事人気No5
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
No.8
Java&Spring記事人気No8
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本