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なら標準で用意されている「calendar」という便利な道具箱(ライブラリ)を使うだけで、驚くほど簡単に解決できます。カレンダーをめくって「30日までかな?31日までかな?」と確認する手間を、すべてコンピュータにお任せしましょう。
ここでは、初心者の方でもすぐに試せるように、2025年9月の月末日を取得する最もシンプルで確実なコードを紹介します。
import calendar
# 取得したい「年」と「月」を設定します
year = 2025
month = 9
# calendar.monthrangeを使うと、月末の日付が自動で計算されます
# 「_」は最初の戻り値(曜日)を無視するためのPython特有の書き方です
_, last_day = calendar.monthrange(year, month)
print(f"{year}年{month}月の月末は{last_day}日です")
2025年9月の月末は30日です
コードの解説:なぜこれで月末がわかるの?
このコードの核心は、calendar.monthrange(year, month) という命令にあります。この命令を実行すると、コンピュータは裏側で指定された年月のカレンダーを計算し、以下の2つの情報をセットで返してくれます。
- 1つ目: その月の1日が何曜日か(0が月曜日、6が日曜日)
- 2つ目: その月が全部で何日あるか(=月末日)
今回の目的は「月末が何日か」を知ることなので、2つ目の値(last_day)だけを取り出して画面に表示させています。この方法なら、2月が28日なのか29日(うるう年)なのかといった複雑な判定も、Pythonが自動で判別してくれるため、計算ミスの心配がありません。
4. 月初(ついたち)の日付を取得・作成する方法
月末の計算は少し複雑でしたが、月初(げっしょ)の日付を取得するのは実はとても簡単です。なぜなら、月が何月であっても、始まりの日は必ず「1日」と決まっているからです。
Pythonで「特定の年月の1日」というデータを作りたいときは、datetime.dateという機能を使います。これを使うと、バラバラの数字だった「年・月・1」を、プログラムが扱いやすい「日付データ」としてひとまとめにできます。
プログラミング未経験の方でも分かりやすい、もっともシンプルな書き方を見てみましょう。
import datetime
# 取得したい年と月を指定します
year = 2026
month = 1
# datetime.date(年, 月, 日) の順に数字を入れるだけでOK!
# 1日は固定なので、最後に「1」を指定します
first_day = datetime.date(year, month, 1)
print("指定した月の月初は:", first_day)
指定した月の月初は: 2026-01-01
このように、datetime.date(year, month, 1)と書くだけで、システムで利用可能な「2026年1月1日」という日付オブジェクトが完成します。この形式で持っておくと、後から「曜日を調べる」といった応用も効くようになるため、単なる数字として扱うよりもずっと便利でスマートな管理が可能になります。
5. 月末の日付をdatetime形式で取得する方法
「今月の最終日が何日か」を知るだけでなく、その日付をそのままプログラムで計算や比較に使いたい場合は、Pythonの標準ライブラリであるdatetimeモジュールと組み合わせるのが最も効率的です。
特に、カレンダー形式の出力ではなく「2025-09-30」のようなデータ形式(datetimeオブジェクト)に変換しておくと、後から「期限まであと何日か?」といった日付の引き算も簡単に行えるようになります。
import calendar
import datetime
# 調べたい年月を指定
year = 2025
month = 9
# calendar.monthrangeで月末の「日にち」を取得
# _(アンダースコア)は、使わない値(曜日)を代入する際によく使われる書き方です
_, last_day = calendar.monthrange(year, month)
# datetime.dateを使って「年月日」のデータ形式にまとめる
end_date = datetime.date(year, month, last_day)
print("月末の日付(データ形式):", end_date)
print("データ型の確認:", type(end_date))
月末の日付(データ形式): 2025-09-30
データ型の確認: <class 'datetime.date'>
このコードのポイントは、calendar.monthrangeから受け取った数値(last_day)を、そのまま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モジュールをうまく組み合わせて使うのがコツです。
まとめ
Pythonで月初と月末を扱う重要性の振り返り
本記事では、Pythonで月初と月末の日付を取得する方法について、初心者の方でも理解できるように基礎から丁寧に解説してきました。プログラミングにおいて日付処理は非常に重要なテーマであり、特に月初や月末の判定は業務システムやデータ処理、自動化処理において頻繁に登場します。
月初は必ず一日と決まっているためシンプルに扱えますが、月末は月ごとに日数が異なるため、正確に求めるには工夫が必要です。そこでPythonの標準ライブラリであるcalendarモジュールを使うことで、複雑な条件分岐を書くことなく、正確に月末日を取得できることが分かりました。
calendarモジュールとdatetimeの使い分け
Pythonで日付を扱う際には、calendarモジュールとdatetimeモジュールを組み合わせて使うことが非常に重要です。calendarモジュールは月の日数や曜日など「カレンダー情報」を取得するための道具であり、datetimeモジュールは日付をデータとして扱うための機能です。
この2つを組み合わせることで、「月末の日付を取得して、そのまま日付オブジェクトとして扱う」といった実務的な処理が可能になります。Python初心者の方は、この組み合わせをしっかり覚えておくことで、日付処理の幅が一気に広がります。
サンプルプログラムで復習する月初・月末取得
ここで、月初と月末を同時に取得する実用的なサンプルコードを改めて確認してみましょう。実際の開発現場でもよく使われる形ですので、しっかり理解しておくことが大切です。
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)
このコードのポイントは、calendar.monthrangeで月末の日数を取得し、それをdatetime.dateに渡している点です。この方法を使えば、うるう年や月ごとの日数の違いを気にする必要はありません。
Python初心者が覚えるべき日付処理のポイント
Python初心者の方が月初や月末を扱う際には、いくつかの重要なポイントを意識することが大切です。まず、日付は単なる数字ではなく「日付オブジェクト」として扱うことで、比較や計算が簡単になります。
また、calendarモジュールのmonthrange関数を使うことで、月末日を正確に取得できるため、無理にif文で分岐を書く必要はありません。こうした標準機能を活用することで、コードをシンプルに保つことができます。
さらに、現在の日付を基準に月初や月末を取得する処理は、実務で非常によく使われます。例えば、毎月の集計処理や締め日管理など、実際の業務に直結する重要な技術です。
月初・月末を活用した実務での応用例
Pythonで月初や月末を扱えるようになると、さまざまな実務処理に応用できます。例えば、毎月の売上集計、請求書の発行処理、ログデータの集計、スケジュール管理など、多くのシステムで必要とされる機能です。
また、日付を正確に扱うことはシステムの信頼性にも大きく関わります。人間の手作業によるミスを防ぎ、自動で正確な処理を行うためにも、今回学んだ月初・月末の取得方法は非常に重要です。
Pythonのcalendarモジュールとdatetimeモジュールを組み合わせて使うことで、初心者の方でも簡単に実務レベルの処理が書けるようになります。今回の内容を繰り返し実践しながら、しっかり身につけていきましょう。
生徒
「Pythonで月末を自動で取得できるのはとても便利だと感じました。」
先生
「そうですね。calendarモジュールを使うことで、複雑な計算をしなくても正確な日付が分かります。」
生徒
「datetimeと組み合わせるのがポイントなんですね。」
先生
「その通りです。日付として扱うことで、さらに応用しやすくなります。」
生徒
「実務でも使える知識だと分かって、しっかり覚えたいと思いました。」
先生
「とても良い意識です。繰り返し使うことで自然に身につきますよ。」