カテゴリ: Python 更新日: 2026/01/08

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

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

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

生徒

「特定の年と月の『その月は何日あるか』をPythonで調べたいです。毎月の日数が違うので手で数えるのは大変です。」

先生

「Pythonにはcalendarという標準モジュールがあって、monthrange()を使うと簡単にその月の日数を取得できます。うるう年や月ごとの日数差も自動で処理してくれますよ。」

生徒

「インストールとか不要ですか?プログラミング初心者でも使えますか?」

先生

「標準ライブラリなので追加インストールは不要です。数行のコードで使えるので、初心者でもすぐに使えます。具体例を見てみましょう。」

1. monthrangeとは?基本の説明

1. monthrangeとは?基本の説明
1. monthrangeとは?基本の説明

calendar.monthrange(year, month) は、指定した年と月に対して二つの値を返します。戻り値はタプルで、最初の要素がその月の最初の曜日(0が月曜日)、二つ目の要素がその月の日数です。たとえば二月は平年なら二十八日、うるう年なら二十九日になりますが、monthrangeは自動で正しい日数を返してくれます。カレンダー処理や月次集計でとても役立つ基本関数です。

2. 基本的な使い方のサンプル

2. 基本的な使い方のサンプル
2. 基本的な使い方のサンプル

まずはシンプルなコードで、特定の年と月の日数を取り出す方法を確認します。コードは短くて分かりやすく、すぐに実行できます。


import calendar

year = 2024
month = 2

first_weekday, days_in_month = calendar.monthrange(year, month)
print(days_in_month)

上記の例では、days_in_monthにその月の日数が入ります。二つ目の要素だけを取り出して使うのが一般的です。

3. 今日の年と月を使って日数を取得する

3. 今日の年と月を使って日数を取得する
3. 今日の年と月を使って日数を取得する

ユーザーの現在の年月を使って日数を取得することも簡単です。これにより今月の日数を自動で得られます。日次処理や月次レポートに便利なテクニックです。


import datetime
import calendar

today = datetime.date.today()
year = today.year
month = today.month

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

4. 任意の年月の月初と月末の日付を作る

4. 任意の年月の月初と月末の日付を作る
4. 任意の年月の月初と月末の日付を作る

取得した日数を使えば、その月の月初と月末のdateオブジェクトも簡単に作れます。これを使えば範囲検索や月ごとのデータ集計にそのまま使えます。


import datetime
import calendar

year = 2025
month = 4

first_day = datetime.date(year, month, 1)
last_day = datetime.date(year, month, calendar.monthrange(year, month)[1])

print(first_day, last_day)

この例のように、月末の日付を直接作ることで、データベース問い合わせや集計の期間指定が簡単になります。

5. うるう年や月による違いの扱い方(注意点)

5. うるう年や月による違いの扱い方(注意点)
5. うるう年や月による違いの扱い方(注意点)

2月の日数はうるう年によって変わりますが、monthrangeは年を指定して呼び出すため、正しい判定を自動で行います。手作業で条件を増やす必要がないため、ミスを減らせます。初心者がよくやりがちなミスは、「二月は常に二十八日と仮定してしまう」ことです。monthrangeを使えばそうしたバグを避けられます。

6. 実務での応用例:月次レポートや締め処理

6. 実務での応用例:月次レポートや締め処理
6. 実務での応用例:月次レポートや締め処理

実際の業務では、月末の売上集計や締め処理のためにその月の最終日を自動で求める必要があります。前述の方法で月末日を取得し、その日付までのデータを抽出すれば自動化が可能です。さらに、翌月の初日を計算して期間を設定することで、二重集計や集計漏れといった問題を防げます。

7. よくある疑問とトラブルシューティング

7. よくある疑問とトラブルシューティング
7. よくある疑問とトラブルシューティング

「monthrangeの返り値の順番を間違えて使ってしまう」「年と月の変数が整数でない」などがよくある問題です。返り値は必ず (first_weekday, days_in_month) の順であることを確認し、年と月は整数で与えるようにしましょう。ユーザー入力を受け取る場合は、int()で型変換を行ってからmonthrangeに渡すと安全です。

カテゴリの一覧へ
新着記事
New1
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New3
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
New4
Flask
FlaskのURLルールとは?ルーティングの基本と動的URLの作り方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Flask
Flaskでクラウド上のメッセージキュー(SQS/PubSub)を扱う完全ガイド!初心者向け解説