|
发表于 2024-12-6 16:54:25
|
显示全部楼层
- from datetime import datetime, timedelta
- def calculate_union_hours(time_ranges):
- # 将时间段按开始时间排序
- sorted_ranges = sorted(time_ranges, key=lambda x: x[0])
-
- # 合并重叠或相邻的时间段
- merged_ranges = []
- for start, end in sorted_ranges:
- if not merged_ranges or start > merged_ranges[-1][1]:
- merged_ranges.append((start, end))
- else:
- merged_ranges[-1] = (merged_ranges[-1][0], max(merged_ranges[-1][1], end))
-
- # 计算总时长
- total_hours = 0
- for start, end in merged_ranges:
- total_hours += (end - start).total_seconds() / 3600 # 秒转小时
-
- return total_hours
- # 示例时间段(使用 datetime 对象)
- time_ranges1 = [
- (datetime(2024, 12, 6, 23, 0), datetime(2024, 12, 7, 2, 0)),
- (datetime(2024, 12, 7, 1, 0), datetime(2024, 12, 7, 3, 0)),
- ]
- time_ranges2 = [
- (datetime(2024, 12, 6, 9, 0), datetime(2024, 12, 6, 10, 0)),
- (datetime(2024, 12, 6, 15, 0), datetime(2024, 12, 6, 17, 0)),
- (datetime(2024, 12, 6, 9, 30), datetime(2024, 12, 6, 12, 0)),
- ]
- # 计算并集总小时数
- total_hours1 = calculate_union_hours(time_ranges1)
- print(f"1、总小时数: {total_hours1}")
- total_hours2 = calculate_union_hours(time_ranges2)
- print(f"2、总小时数: {total_hours2}")
复制代码 |
|