Python calendarモジュール完全ガイド:コード例付きで徹底解説
Pythonの組み込みcalendarモジュールは、日付、月、年を扱うための強力なツールを提供します。TextCalendarやHTMLCalendarなどのクラスを活用することで、印刷可能またはウェブフレンドリーなカレンダーの作成、日付のイテレーション、カスタムスケジューリングルールの計算が可能です。
以下に最も一般的なユースケースをステップバイステップで解説し、Python 2とPython 3の両方で動作する即実行可能なコードスニペットを提供します。
ステップ1 – テキストカレンダーの生成
以下のスクリプトを実行すると、週の開始を木曜日に設定した2025年1月のプレーンテキストカレンダーが表示されます:

- 1行目:
import calendarでモジュール読み込み。 - 3行目:
c = calendar.TextCalendar(calendar.THURSDAY)で週開始を木曜日に設定したカレンダーオブジェクト作成。 - 4行目:
txt = c.formatmonth(2025, 1)で2025年1月をフォーマット。 - 5行目:
print(txt)でカレンダー出力。
週開始を日曜日に変更して柔軟性を確認:

ステップ2 – HTMLカレンダーのレンダリング
ウェブアプリケーション向けにHTMLCalendarはCSSでスタイリング可能な完全なHTMLテーブルを生成:

ステップ3 – 月の日付をイテレーション
itermonthdaysメソッドは、隣月に属する日のパディングゼロを含む、その月の全日を生成します。これはカレンダーのレイアウト調整に有用です:

- ゼロは対象月以外のスロットを示す。
- 月がどの週で始まり、終わるかを判断するのに役立つ。
ステップ4 – ロケール対応の名称取得
Pythonはシステムのロケールに基づいて月名と曜日名を自動的に提供します。calendar.month_nameとcalendar.day_nameを出力したサンプル:

ロケール設定はマシンにより異なるため、他国のユーザーでは結果が異なる場合があります。
ステップ5 – カスタム日付の計算(例: 各月の最初の月曜日)
2025年の各月の第1月曜日を求める簡潔なスクリプト:

ロジックはcalendar.monthcalendarで週のマトリックスを取得し、最初の2週間で非ゼロの月曜日値をチェックします。
Python 2の例
import calendar
# プレーンテキストカレンダー作成
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print text
# HTMLフォーマットカレンダー作成
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print html
# 月の日付をループ
for i in c.itermonthdays(2025, 4):
print i
# ロケール対応の月名と曜日名
for name in calendar.month_name:
print name
for day in calendar.day_name:
print day
# 各月の最初の月曜日を検索
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print "%10s %2d" % (calendar.month_name[month], auditday)
Python 3の例
import calendar
# プレーンテキストカレンダー作成
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print(text)
# HTMLフォーマットカレンダー作成
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print(html)
# 月の日付をループ
for i in c.itermonthdays(2025, 4):
print(i)
# ロケール対応の月名と曜日名
for name in calendar.month_name:
print(name)
for day in calendar.day_name:
print(day)
# 各月の最初の月曜日を検索
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print("%10s %2d" % (calendar.month_name[month], auditday))
まとめ
TextCalendarとHTMLCalendarで週開始日とフォーマットをカスタマイズ。itermonthdaysでパディングゼロを扱い、精密なカレンダーレイアウトを実現。calendar.month_nameとcalendar.day_nameでロケールデータを自動取得。calendar.monthcalendarとシンプルなロジックでルールベースの日付(例: 第1月曜日)を計算。
Python
- C#抽象クラス実践チュートリアル:コード例で理解する設計パターン
- Python strip()メソッド完全ガイド:実践例付き
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Python round()関数を実例で徹底解説
- Python map()関数をマスター:構文、例、ベストプラクティス
- Python timeit():実行時間測定の実例付きガイド
- Python yieldをマスター:ジェネレータvs return – 実践ガイド
- Python collections.Counter:効率的なカウント、更新、演算操作
- Python list.count() 完全ガイド:実践例付きで徹底解説
- Python list.index():要素の位置を検索する実践ガイド
- Python C拡張プログラミング:高速ネイティブモジュールの構築