0
1

期間リストの重複期間、空白期間を確認する方法【Python】

Posted at

説明

  1. 開始日で date_list をソートします。
  2. 現在の終了日と次の開始日を取得し、以下の条件でチェックを行います。
    • 重複期間(次の開始日が終了日よりも早い)
    • 空白期間(終了日の翌日が次の開始日でない)
from datetime import datetime

# 日付リスト
date_list = [
  {'start_date': '2024/04/01', 'end_date': '2024/04/30'},
  {'start_date': '2024/05/01', 'end_date': '2024/05/31'},
  {'start_date': '2024/06/01', 'end_date': '2024/06/30'},
  {'start_date': '2024/07/01', 'end_date': '2024/07/31'},
  {'start_date': '2024/07/01', 'end_date': '2024/07/31'},
]

# 文字列を日付に変換
def parse_date(date_str):
    return datetime.strptime(date_str, '%Y/%m/%d')

# 日付リストの期間チェック
def check_date_range(date_list):

    # 開始日でソート
    sort_list = sorted(date_list, key=lambda item: parse_date(item['start_date']))

    for i in range(len(sort_list) - 1):
        end_date = parse_date(sort_list[i]['end_date'])
        next_start_date = parse_date(sort_list[i + 1]['start_date'])
        
        # 重複期間(次の開始日が終了日よりも早い)
        if next_start_date <= end_date:
            return '重複期間あり'
        
        # 空白期間(終了日の翌日が次の開始日でない)
        if (next_start_date - end_date).days > 1:
            return '空白期間あり'

# 結果を確認
result = check_date_range(date_list)

print(result) # 重複期間あり
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1