Pythonで月末・月初を取得する方法を完全ガイド!初心者でもわかる日時操作
生徒
「Pythonで月末の日付を自動で出したいんですが、どうやればいいんですか?」
先生
「Pythonには、カレンダー計算を助けてくれる便利なcalendarモジュールがあります。これを使うと月末や月初を簡単に求められますよ。」
生徒
「カレンダーの計算って難しそうですが、覚える必要がありますか?」
先生
「心配しなくて大丈夫です。Pythonが自動で計算してくれるので、短いコードを書くとすぐに月末や月初を取得できますよ。」
1. Pythonで月末・月初を扱うための基本知識
Pythonの日時操作では、datetimeモジュールとcalendarモジュールをよく組み合わせて使います。特に月末を求めるときに便利なのがcalendar.monthrange()という関数です。この関数は、指定した年と月に対して「月の最初の曜日」と「月の日数」を返します。ここで得られる「日数」を使えば、月末の日付を一瞬で判定できます。
プログラミング初心者の方でも、カレンダーの仕組みを覚えなくても問題ありません。Python が自動で正しい日付を計算してくれるため、安心して使うことができます。例えば「2月は28日なのか29日なのか」などを気にする必要はなく、コードが正しい結果を返してくれます。
2. calendar.monthrangeで月末の日付を取得する方法
まずは実際に月末を取得するコードを見てみましょう。ここでは現在の日付から年と月を取り出し、その月の最終日を求めます。月末の日付を自動で求める処理は、日報作成、売上集計、月次レポートなどのシステムでもよく使われます。
import datetime
import calendar
today = datetime.date.today()
year = today.year
month = today.month
last_day = calendar.monthrange(year, month)[1]
month_end = datetime.date(year, month, last_day)
print(month_end)
このように、calendar.monthrange()が返す2番目の値がその月の日数です。プログラムではそれをそのまま月末の日付として使います。初心者の方がつまずきやすいのは、「monthrangeの返り値がタプルである」という点ですが、左から順番に番号が付いていると考えると理解しやすいです。
2025-12-31
3. 月初の日付を取得する方法
月初はとても簡単で、常に「1日」と決まっています。そのため、年と月さえわかればいつでも同じ方法で取得できます。月初を使う処理は、期間の開始日を設定するときや、月ごとの統計データを作成するときなど、幅広い場面で登場します。
import datetime
today = datetime.date.today()
year = today.year
month = today.month
month_start = datetime.date(year, month, 1)
print(month_start)
2025-12-01
このように、月初はいつでも1日なので、datetime.date(year, month, 1)と書くだけで取得できます。月末と合わせて覚えておくと、日付範囲を扱うコードがとても書きやすくなります。
4. 任意の年月の月末・月初を取得する応用例
次に、ユーザーが入力した年と月から月末や月初を計算する方法も覚えておくと便利です。業務システムでは「指定月のレポートを作りたい」という場面が多いため、柔軟に年月を指定できると実用性が高まります。
import datetime
import calendar
year = 2025
month = 5
first_day = datetime.date(year, month, 1)
last_day = calendar.monthrange(year, month)[1]
end_day = datetime.date(year, month, last_day)
print(first_day, end_day)
2025-05-01 2025-05-31
実務では「来月の初日」「先月の最終日」を求める処理もよく出てきます。こうした計算も、datetimeとcalendarを組み合わせれば簡単に実装できます。Pythonのこの柔軟さは、日付を扱うプログラムを書き始めたばかりの方にも大きな助けとなります。
5. 月末や月初を扱うときのよくあるつまずきポイント
月末や月初の処理を書くとき、初心者がつまずきやすいポイントがあります。それは「日付の計算を自分でしようとしてしまう」という点です。月によって日数が違うため、手作業で条件分岐を書こうとするとすぐに複雑になります。しかし、Python にはこうした計算を自動で行う仕組みが標準で用意されています。
また、monthrangeの返す曜日を誤って使ってしまうケースもよくあります。最初の値は「月の最初の曜日」で、実際の月末日には関係ありません。2番目の値だけを使うことをしっかり覚えておくと安心です。このような小さなポイントを押さえることで、日付計算の精度と扱いやすさが格段に向上します。