1. はじめに
Pythonで日付操作を行う機会は、業務システムや個人開発などさまざまな場面で登場します。特に「任意の2つの日付の間にある全日付を取得する」処理は、シフト表の作成や、日次データの分析、自動レポート生成など、実務でも頻出するパターンです。
本記事では、Pythonの標準ライブラリを活用して、2つの日付の間にあるすべての日付をリストとして取得する方法を、初心者にもわかりやすく解説します。
具体的なコード例とその実行結果を掲載しながら、エラーを避けるための注意点や、実務での応用例にも触れていきます。
2. Pythonで日付の範囲を扱う基本:datetimeとtimedelta
2-1. datetimeとtimedeltaの基本
Pythonで日付を扱うには、標準ライブラリであるdatetime
モジュールが欠かせません。2つの日付の間のすべての日付を取得するには、日付の差分を計算し、1日ずつ加算しながらリスト化する方法が一般的です。
from datetime import datetime, timedelta
# 任意の日付を定義
start_date = datetime(2025, 7, 20)
end_date = datetime(2025, 7, 23)
# 差分日数を計算
delta = end_date - start_date
print(f"差分日数: {delta.days}日")
実行結果:
差分日数: 3日
2-2. forループで日付リストを作成
次に、1日ずつ増やして全日付を取得するコードを紹介します。
from datetime import datetime, timedelta
start_date = datetime(2025, 7, 20)
end_date = datetime(2025, 7, 23)
date_list = []
current_date = start_date
while current_date <= end_date:
date_list.append(current_date.strftime('%Y-%m-%d')) # 文字列に整形
current_date += timedelta(days=1)
print(date_list)
実行結果:
['2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23']
3. よくある使い方・応用例
3-1. ユーザーから日付を入力させる
実務では、ユーザーが指定した日付範囲に応じて処理することも多いです。input()
関数を使えば、柔軟に対応できます。
from datetime import datetime, timedelta
# ユーザーから日付入力
start_str = input("開始日を入力してください(例:2025-07-20): ")
end_str = input("終了日を入力してください(例:2025-07-23): ")
# 文字列から日付に変換
start_date = datetime.strptime(start_str, "%Y-%m-%d")
end_date = datetime.strptime(end_str, "%Y-%m-%d")
# 日付リストを作成
date_list = []
current = start_date
while current <= end_date:
date_list.append(current.strftime("%Y-%m-%d"))
current += timedelta(days=1)
print("指定された日付範囲:", date_list)
実行結果(例):
指定された日付範囲: ['2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23']
3-2. 曜日情報も合わせて取得
実務では曜日も知りたい場面があります。以下のように拡張できます。
from datetime import datetime, timedelta
start_date = datetime(2025, 7, 20)
end_date = datetime(2025, 7, 23)
date_list = []
current = start_date
while current <= end_date:
date_info = current.strftime("%Y-%m-%d (%A)") # 英語の曜日
date_list.append(date_info)
current += timedelta(days=1)
for d in date_list:
print(d)
実行結果:
2025-07-20 (Sunday)
2025-07-21 (Monday)
2025-07-22 (Tuesday)
2025-07-23 (Wednesday)
4. 注意点・エラー対策
4-1. 日付の順番が逆だった場合
開始日より終了日が前だと、ループが実行されません。チェック処理を入れると親切です。
if start_date > end_date:
print("エラー:開始日が終了日より後になっています。")
exit()
4-2. 日付形式のエラー
ユーザー入力の場合、日付フォーマットのミスでエラーが起きやすいです。try-except
を活用しましょう。
try:
start_date = datetime.strptime(start_str, "%Y-%m-%d")
except ValueError:
print("日付の形式が正しくありません。例:2025-07-20")
exit()
5. まとめ
本記事では、Pythonを使って「任意の2つの日付の間にある全日付を取得する」方法を詳しく解説しました。
以下のポイントを押さえておけば、さまざまな業務や学習シーンで応用できます。
datetime
とtimedelta
を使えば日付操作は簡単- 開始日〜終了日までをループ処理で取得可能
- 入力チェックやエラー処理でより堅牢なコードに
たとえば、シフト管理ツール、出勤記録分析、Webアプリのカレンダー機能など、実務でもすぐに役立ちます。
初心者の方は、まずは日付処理に慣れることが、データ分析や自動化処理への第一歩になりますよ。