1. はじめに
Pythonで「月初・月末を取得する」方法は、日付処理を行う上で非常に役立ちます。たとえば、月単位のレポートを作成したり、スケジュール管理、会計処理などにおいて、「今月の最初の日」や「最後の日」を正確に把握する必要があります。
本記事では、Python標準ライブラリであるdatetime
やcalendar
を活用して、月初・月末の日付を取得する方法を、初心者の方にもわかりやすく解説します。具体的なコードとその実行結果を交えて解説していくので、実務や学習にもすぐに活かせます。
2. Pythonで月初・月末を取得する基本方法
2-1. 月初を取得する方法
月初は、「その月の1日」として簡単に取得できます。datetime
モジュールを使って、現在の年月を取得し、日付を「1」に設定することで実現できます。
from datetime import datetime, date
# 今日の日付から月初を作成
today = date.today()
month_start = date(today.year, today.month, 1)
print("月初:", month_start)
実行結果:
月初: 2025-07-01
2-2. 月末を取得する方法(calendar.monthrangeを使用)
月末は、月によって28日〜31日まで異なります。calendar
モジュールのmonthrange()
関数を使えば、指定した月の最終日を取得できます。
import calendar
# 月末を取得(calendar.monthrangeで日数を取得)
_, last_day = calendar.monthrange(today.year, today.month)
month_end = date(today.year, today.month, last_day)
print("月末:", month_end)
実行結果:
月末: 2025-07-31
3. よくある使い方・応用例
3-1. 前月・翌月の月初・月末を取得する
「前月の月初」「翌月の月末」など、対象月を動的に指定したい場合はrelativedelta
を活用するのが便利です(dateutil
パッケージが必要です)。
from dateutil.relativedelta import relativedelta
# 前月の月初と月末を取得
prev_month = today - relativedelta(months=1)
prev_start = date(prev_month.year, prev_month.month, 1)
_, prev_end_day = calendar.monthrange(prev_month.year, prev_month.month)
prev_end = date(prev_month.year, prev_month.month, prev_end_day)
print("前月の月初:", prev_start)
print("前月の月末:", prev_end)
実行結果:
前月の月初: 2025-06-01
前月の月末: 2025-06-30
3-2. 月初・月末でフィルター処理を行う(データ分析向け)
データ分析やレポート作成では、月初・月末を使って期間内のデータをフィルタリングする場面がよくあります。
# 仮のデータリスト(日付だけのリスト)
sample_dates = [
date(2025, 7, 1),
date(2025, 7, 15),
date(2025, 7, 31),
date(2025, 8, 1)
]
# 今月の範囲に含まれる日付を抽出
month_data = [d for d in sample_dates if month_start <= d <= month_end]
print("今月のデータ:", month_data)
実行結果:
今月のデータ: [datetime.date(2025, 7, 1), datetime.date(2025, 7, 15), datetime.date(2025, 7, 31)]
4. 注意点・エラー対策
4-1. calendar.monthrangeの戻り値に注意
calendar.monthrange()
は、タプルで(曜日番号, 月の日数)を返します。最終日だけが欲しい場合は2番目の値を使いましょう。
4-2. dateutilが標準ライブラリでないことに注意
relativedelta
を使うには、別途python-dateutil
をインストールする必要があります。以下のコマンドで事前にインストールしてください。
pip install python-dateutil
4-3. datetimeとdateの混同に注意
datetime.datetime
とdatetime.date
は異なる型です。比較時などにエラーが出ないよう、型を統一して扱いましょう。
5. まとめ
今回は、Pythonを使って「月初・月末の日付を取得する方法」について詳しく解説しました。
datetime
で月初(1日)を簡単に取得calendar.monthrange()
で月末の日付を取得relativedelta
を使えば前月・翌月も簡単に- 実務での応用例やフィルタリング方法も紹介
この知識は、日次・月次レポートやログ管理などの実務だけでなく、個人プロジェクトや日付操作の理解にも役立ちます。学習の際は、「型の違い」や「ライブラリのインストール」などにも注意して取り組みましょう。
ぜひ、実際の開発に役立ててください!