Python|任意の2つの日付の間にある全日付を取得する

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つの日付の間にある全日付を取得する」方法を詳しく解説しました。
以下のポイントを押さえておけば、さまざまな業務や学習シーンで応用できます。

  • datetimetimedeltaを使えば日付操作は簡単
  • 開始日〜終了日までをループ処理で取得可能
  • 入力チェックやエラー処理でより堅牢なコードに

たとえば、シフト管理ツール、出勤記録分析、Webアプリのカレンダー機能など、実務でもすぐに役立ちます。
初心者の方は、まずは日付処理に慣れることが、データ分析や自動化処理への第一歩になりますよ。

タイトルとURLをコピーしました