🐍Pythonで日付&時間を自在に操る!relativedelta・カレンダーモジュール活用術&おすすめ書籍5選

目次
  1. 🐍 日付と時間の計算は「ライブラリ任せ」が正解
  2. 📘 そもそも:datetimeだけだと何が足りない?
  3. 🚀 relativedelta:年・月・日・時・分・秒を自由自在に
  4. 🔤 datetimeオブジェクトを文字列に変換:strftime
  5. 📅 calendarモジュール:月末日の取得が一瞬で終わる
  6. 📚 Python日付処理の理解を加速する厳選アイテム
  7. ❓ よくある質問(FAQ)
  8. 🎯 まとめ:日付処理は「賢いライブラリ」に任せて時間を生み出す

🐍 日付と時間の計算は「ライブラリ任せ」が正解

「3か月前の日付を出したい」「来週の同じ曜日を取得したい」「うるう年も考慮して2月の月末日を知りたい」——Pythonでこうした処理を自力で書こうとすると、意外と泥沼にハマります。月ごとに日数が違う、うるう年のルールがややこしい、月またぎの計算で1日ずれる……。📅

でも安心してください。Pythonには日付計算を驚くほどスマートに書けるライブラリがそろっています。dateutilrelativedelta と、標準ライブラリの calendar モジュール——この2つを押さえれば、面倒な日付ロジックから一気に解放されます。✨

📘 そもそも:datetimeだけだと何が足りない?

Python標準の datetime モジュールは便利ですが、組み込みの timedelta では「日・時・分・秒」までしか加減算できません。つまり「3か月後」「1年前」のように月や年単位の計算がストレートにはできないのです。

「30日 × 3 で3か月にすればいい?」——いいえ、月によって日数が違うので、これでは正確になりません。ここで活躍するのが dateutil ライブラリの relativedelta です。💡

🚀 relativedelta:年・月・日・時・分・秒を自由自在に

インストールとインポート

dateutil は標準ライブラリではないので、未導入の場合はインストールが必要です。

pip install python-dateutil

使うときはこう書きます。datetime モジュールと名前が似ていてややこしいので注意してください。

from dateutil.relativedelta import relativedelta
from datetime import datetime

基本の使い方:明日・昨日を取得する

now = datetime.now()

# 1日後(明日)
tomorrow = now + relativedelta(days=1)

# 1日前(昨日)
yesterday = now - relativedelta(days=1)

datetime オブジェクトに relativedelta を足したり引いたりするだけ。結果も datetime オブジェクトで返ってくるのでそのまま次の処理に渡せます。👍

年・月・週・時・分・秒すべて対応

キーワード引数を変えるだけで、さまざまな単位の加減算ができます。

  • 📌 years=1:1年単位
  • 📌 months=1:1か月単位
  • 📌 weeks=1:1週間単位
  • 📌 days=1:1日単位
  • 📌 hours=1:1時間単位
  • 📌 minutes=1:1分単位
  • 📌 seconds=1:1秒単位

実例:7か月前の日付を取得する

from datetime import datetime
from dateutil.relativedelta import relativedelta

now = datetime.now()
result = now - relativedelta(months=7)
print(result)

今日が「2025年6月13日」なら、結果は 2024年11月13日。月ごとの日数差を気にせずに、直感的に書いたとおりの計算結果が返ってきます。これがライブラリ任せの威力です。⚡

🔤 datetimeオブジェクトを文字列に変換:strftime

日付をログや画面に表示するには、文字列に変換する必要があります。そこで使うのが strftime メソッドです。

now = datetime.now()
print(now.strftime("%Y年%m月%d日 %H時%M分%S秒"))
# 例: 2025年06月13日 14時23分05秒

print(now.strftime("%Y/%m/%d"))
# 例: 2025/06/13

覚えておきたいフォーマット指定子

  • 📌 %Y:年(4桁、例:2025)
  • 📌 %m:月(2桁ゼロ埋め、例:06)
  • 📌 %d:日(2桁ゼロ埋め、例:13)
  • 📌 %H:時(24時間表記、2桁)
  • 📌 %M:分(2桁)
  • 📌 %S:秒(2桁)
基本的にすべてゼロ埋めされた文字列になります。1月なら「01」、2日なら「02」のように整った表示になるので、ファイル名やログ出力にもそのまま使えます。📝

📅 calendarモジュール:月末日の取得が一瞬で終わる

「2月の月末日って何日?」と聞かれて即答できますか? 平年なら28日、うるう年なら29日。さらに「うるう年とは4で割り切れる年。ただし100で割り切れる年は除外。ただし400で割り切れる年は含める」……このロジックを自前で書くのは正直つらいです。😩

そこで使えるのが標準ライブラリの calendar モジュール。monthrange() 関数を使えば、月末日が1行で取得できます。

monthrangeで月末日を取得

import calendar

# 2020年2月(うるう年)
week_day, last_day = calendar.monthrange(2020, 2)
print(last_day)   # 29

# 2021年5月
week_day, last_day = calendar.monthrange(2021, 5)
print(last_day)   # 31

monthrange(year, month) はタプルを返し、1つ目の要素はその月の1日が何曜日か(0が月曜〜6が日曜)、2つ目の要素がその月の日数(=月末日)です。うるう年ロジックを書く必要は一切なし。これだけでスッキリ書けます。✨

カレンダー文字列の取得もカンタン

import calendar

print(calendar.month(2025, 1))

こうすると、その月のカレンダーが整形済みの文字列として出力されます。CLIツールなどでサクッと表示したいときに便利です。

📚 Python日付処理の理解を加速する厳選アイテム

日付・時間の操作は実務でとにかく出番が多い領域。レポート作成、ログ集計、予約システム、データ分析……どこに行ってもついて回ります。手元に良書を1冊置いておくと、つまずいたときの心強さがまったく違います。

🌱 まずはPython全体を体系的に:『スッキリわかるPython入門』

文法・標準ライブラリの使い方を体系的に学べる定番書。datetime をはじめとした標準モジュールの全体像が掴めます。

📖 実務でPythonを使いこなす:『Python実践入門』

標準ライブラリの活用法や、Pythonらしい書き方を深く学べる1冊。dateutil のような外部ライブラリとの付き合い方も自然と身につきます。

📊 データ分析の現場で日付処理を極める:『Pythonによるデータ分析入門』

pandasによる時系列処理は、日付計算の応用編。日付処理をマスターしたら、ぜひデータ分析の世界へ進みましょう。

🤖 学んだPythonを即実用へ:『退屈なことはPythonにやらせよう』

日付処理は自動化スクリプトでも頻出。ファイル名に日付を付けたり、定期処理を書いたり——実用シーンの宝庫です。

⌨️ 長時間コーディングを支える相棒キーボード

日付処理の試行錯誤は意外とタイピングが多い作業。打鍵感が良く、複数デバイス切替にも対応した一台があると、集中力が長く続きます。

❓ よくある質問(FAQ)

🤔 Q1. timedeltaとrelativedelta、どう使い分ける?

標準ライブラリの timedelta日・時・分・秒までの計算用。週単位もキーワード引数で扱えます。一方、「3か月後」「1年前」のように月や年単位の計算をしたいときは relativedelta が必要です。日数ベースで済むなら標準のtimedeltaでOKです。

🤔 Q2. dateutilは標準ライブラリ?

いいえ、外部ライブラリです。pip install python-dateutil でインストールする必要があります。ただしpandasなどの主要ライブラリの依存先になっているため、データ分析環境ではすでに入っていることも多いです。

🤔 Q3. strftimeとstrptimeの違いは?

strftime は datetime オブジェクト → 文字列の変換、strptime は文字列 → datetime オブジェクトの変換です。「f は format(書き出す)」「p は parse(読み取る)」と覚えると混乱しません。👌

🤔 Q4. うるう年判定を自分で書く必要はある?

基本的には不要です。calendar.isleap(year) でうるう年判定ができますし、月末日も calendar.monthrange() で一発取得できます。標準ライブラリを使うほうが圧倒的にバグが少なく、コードもスマートになります。✨

🤔 Q5. タイムゾーンを考慮した日付計算はできる?

はい、datetime オブジェクトに tzinfo を設定すればOKです。サードパーティ製では zoneinfo(Python 3.9以降は標準)や pytz が定番。Webアプリやグローバルサービスを扱うなら、タイムゾーン対応は必須スキルです。🌍

🎯 まとめ:日付処理は「賢いライブラリ」に任せて時間を生み出す

日付と時間の計算は、自前で書けば書くほどバグが入り込みやすい領域です。dateutil.relativedelta で年・月・日・時・分・秒の柔軟な計算を、calendar モジュールで月末日やうるう年判定を——それぞれライブラリに任せることで、コードは短く、読みやすく、バグも少なくなります。🚀

「30日 × 3 で3か月」みたいなごまかしロジックを書く時代はもう終わり。今日紹介した関数を引き出しに入れておくだけで、明日からの開発効率は確実に上がります。手を動かして覚えて、あなたのPythonコードに“スマートさ”を加えていきましょう。💪

あざらし

はじめまして、あざらしです。 フリーターからエンジニア会社へ就職し、 現在はフリーランスのシステムエンジニアとして働いています。 本業のエンジニア業のかたわら、 ✍️ ブログ運営 と「収入の柱を増やす挑戦」を少しずつ続けています。 フリーター時代から比べると、 段階的に収入が増えていくのを実感できるのが素直にうれしい今日この頃。 このブログでは、日々の気づき・体験談 IT・ガジェット・ゲーム系の話 「調べて分かったこと」を噛み砕いた解説 などを中心に、ジャンルに縛られない雑記ブログとして発信しています。 「自分と同じように悩んでいる人のヒントになればいいな」 そんな気持ちで更新中です。 👉 プロフィール詳細は、名前「あざらし」をクリックしてください