以下是一个示例代码,解决了计算不同ID的日期范围之间重叠天数的总和的问题:
from datetime import datetime, timedelta
# 定义日期范围类
class DateRange:
def __init__(self, start_date, end_date):
self.start_date = start_date
self.end_date = end_date
def get_overlap_days(self, other_range):
overlap_start = max(self.start_date, other_range.start_date)
overlap_end = min(self.end_date, other_range.end_date)
overlap = (overlap_end - overlap_start).days + 1
return max(0, overlap)
def calculate_overlap_days(date_ranges):
total_overlap_days = 0
for i in range(len(date_ranges)):
for j in range(i + 1, len(date_ranges)):
overlap_days = date_ranges[i].get_overlap_days(date_ranges[j])
total_overlap_days += overlap_days
return total_overlap_days
# 示例数据
date_range1 = DateRange(datetime(2022, 1, 1), datetime(2022, 1, 5))
date_range2 = DateRange(datetime(2022, 1, 4), datetime(2022, 1, 8))
date_range3 = DateRange(datetime(2022, 1, 10), datetime(2022, 1, 15))
date_ranges = [date_range1, date_range2, date_range3]
# 计算重叠天数总和
overlap_days = calculate_overlap_days(date_ranges)
print("Total overlap days:", overlap_days)
在这个示例中,我们定义了一个DateRange
类来表示日期范围,该类包含起始日期和结束日期。然后,我们使用get_overlap_days
方法来计算两个日期范围之间的重叠天数。最后,我们使用calculate_overlap_days
函数来计算不同ID的日期范围之间重叠天数的总和。
请注意,此示例假设日期范围是闭区间,即包括起始日期和结束日期。如果你的需求是半开区间(包括起始日期但不包括结束日期),你可以相应地调整计算重叠天数的逻辑。