Pythonで月末・月初を取得する方法を解説!初心者でもわかるcalendarモジュールの使い方
生徒
「Pythonで毎月の最初の日とか、最後の日って簡単に出せるんですか?」
先生
「もちろんできますよ!Pythonのcalendarモジュールを使えば、月初や月末の日付を簡単に取得できます。」
生徒
「月末って何日になるか毎月バラバラですよね。どうやって調べてるんですか?」
先生
「いい質問ですね!それじゃあ実際に、calendarモジュールの使い方を一緒に見ていきましょう。」
1. 月初・月末とは?Pythonでどう使う?
プログラミングの世界、特に事務処理やデータ分析の自動化において、「月初(げっしょ)」と「月末(げつまつ)」を正しく扱うことは非常に重要です。月初はその月の1日を指しますが、問題は「月末」です。30日だったり31日だったり、はたまた2月のように28日や29日(うるう年)だったりと、月によってバラバラですよね。
例えば、以下のようなケースを想像してみてください。
- 「毎月末日に自動でお小遣い帳の集計をしたい」
- 「今月が残りあと何日あるか計算したい」
これらを人間が手動で設定するのは大変ですが、Pythonのcalendarモジュールを使えば、プログラムが自動でカレンダーを確認して「今月の最後は○日だ!」と一瞬で判断してくれます。
まずは、一番シンプルな考え方をイメージするために、身近な例をコードにしてみましょう。プログラミングが初めての方でも、なんとなく「こう動くんだな」と分かれば大丈夫です。
# 2024年(うるう年)の2月を例に考えてみましょう
month_name = "2月"
start_day = 1 # 月初は必ず1日
end_day = 29 # 2024年の2月は29日まで
print(f"{month_name}のスタートは{start_day}日、終わりは{end_day}日です!")
このように、日付を数字として扱えるようになると、Pythonで「自動カレンダー」を作る第一歩になります。次の章からは、Pythonがどうやって自動でこの「29日」や「31日」を見つけ出すのか、その具体的な魔法(関数)について詳しく解説していきます。
2. Pythonのcalendarモジュールで月末日を取得する基本
Pythonでカレンダーに関する操作を効率化したいなら、標準ライブラリのcalendarモジュールが非常に便利です。このモジュールは追加のインストールが不要で、インポートするだけで「特定の月が何日まであるか」「指定した日が何曜日か」といった情報を簡単に取得できます。
特に、実務でよく使われるのが「月末の日付(最終日)を自動で判定する」機能です。月によって30日だったり31日だったり、あるいは、うるう年の2月を判定するのは面倒ですが、calendar.monthrange()を使えば一瞬で解決します。
monthrangeの仕組み:
この関数に「年」と「月」を渡すと、「その月の1日の曜日」と「その月の日数(末日)」の2つをセット(タプル形式)で返してくれます。
プログラミングが初めての方でも扱いやすい、シンプルなサンプルコードを見てみましょう。
import calendar
# 調べたい「年」と「月」を設定します
year = 2026
month = 2
# monthrangeを使って月末日を取得(戻り値の2番目が日数です)
first_weekday, last_day = calendar.monthrange(year, month)
print(f"{year}年{month}月の末日は、{last_day}日です。")
# 実行結果:2026年2月の末日は、28日です。
このコードのポイントは、last_dayという変数にその月の最後の日(28や31など)が自動的に代入される点です。これにより、カレンダーを目視で確認したり、複雑なif文で月ごとの日数を条件分岐させたりする手間が一切なくなります。初心者の方こそ、まずはこの便利な関数からマスターしましょう。
3. 月末を取得する基本コード
それでは、実際に月末の日付を取得するPythonコードを見てみましょう。例として2025年9月の月末を求めます。
import calendar
year = 2025
month = 9
# 月末を取得
_, last_day = calendar.monthrange(year, month)
print(f"{year}年{month}月の月末は{last_day}日です")
2025年9月の月末は30日です
calendar.monthrange()は、2つの値を返します。最初は「月初の曜日」、2つ目が「月の日数」です。月末を知りたいなら、2つ目の値だけを使えばOKです。
4. 月初を取得する方法も知っておこう
月初の日付は毎月「1日」ですので、特別な関数を使わなくても簡単にわかります。ただし、年月とセットで扱いたいときはdatetime.dateを使って「年月日」の形で持っておくと便利です。
import datetime
year = 2025
month = 9
first_day = datetime.date(year, month, 1)
print("月初は", first_day)
月初は 2025-09-01
このように、1日を指定するだけで月初の日付が表現できます。
5. 月末の日付をdatetime形式で取得する方法
カレンダーの末日だけでなく、日付として扱いたい場合は、datetime.dateと組み合わせましょう。
import calendar
import datetime
year = 2025
month = 9
_, last_day = calendar.monthrange(year, month)
end_date = datetime.date(year, month, last_day)
print("月末の日付は", end_date)
月末の日付は 2025-09-30
datetime.dateは年月日を扱う便利なクラスで、日付の比較や計算もできます。
6. 現在の月の月末・月初を自動取得する
その時その時の「今の年月」を使って、月初・月末を取得したい場合は、datetime.datetime.today()を使って今日の日付を取得し、そこから計算します。
import calendar
import datetime
today = datetime.date.today()
year = today.year
month = today.month
# 月初と月末
first_day = datetime.date(year, month, 1)
_, last = calendar.monthrange(year, month)
last_day = datetime.date(year, month, last)
print("月初:", first_day)
print("月末:", last_day)
月初: 2025-09-01
月末: 2025-09-30
このように、現在の年月からも簡単に月初・月末を求めることができます。
7. 月末の日付を使ったよくある用途
月末や月初の日付は、実際の業務やアプリでもよく使われます。たとえば:
- 給料計算の日付チェック
- スケジュールの締め切り処理
- 月末のログ出力や集計
人間だと「今月末は何日だっけ?」とカレンダーを見て確認しますが、プログラムに任せれば自動で正確に処理できます。
8. calendarモジュールで他にできること
calendarモジュールは月末だけでなく、次のような便利機能もあります。
calendar.isleap(year):うるう年かどうかを判定calendar.weekday(year, month, day):その日が何曜日かcalendar.monthcalendar(year, month):その月のカレンダー表をリストで取得
日付の処理は、datetimeモジュールとcalendarモジュールをうまく組み合わせて使うのがコツです。