python代码 时间范围字典列表 时间存在重复 计算时间并集共多少分钟
时间: 2023-07-31 08:10:42 浏览: 102
可以使用 Python 中的 datetime 模块来计算时间并集,具体实现可以参考以下代码:
```python
from datetime import datetime, timedelta
# 时间范围字典列表
time_ranges = [
{'start': '2022-01-01 10:00:00', 'end': '2022-01-01 12:00:00'},
{'start': '2022-01-01 11:00:00', 'end': '2022-01-01 13:00:00'},
{'start': '2022-01-01 14:00:00', 'end': '2022-01-01 15:00:00'},
]
# 将时间字符串转换为 datetime 对象
time_ranges = [{'start': datetime.strptime(tr['start'], '%Y-%m-%d %H:%M:%S'),
'end': datetime.strptime(tr['end'], '%Y-%m-%d %H:%M:%S')} for tr in time_ranges]
# 按开始时间排序
time_ranges.sort(key=lambda tr: tr['start'])
# 初始化并集时间段列表
union_time_ranges = [time_ranges[0]]
# 计算并集时间段
for tr in time_ranges[1:]:
if tr['start'] <= union_time_ranges[-1]['end']:
if tr['end'] > union_time_ranges[-1]['end']:
union_time_ranges[-1]['end'] = tr['end']
else:
union_time_ranges.append(tr)
# 计算并集时间段的总分钟数
total_minutes = sum([(utr['end'] - utr['start']).seconds // 60 for utr in union_time_ranges])
print(total_minutes)
```
其中,time_ranges 是时间范围字典列表,每个字典包含开始时间和结束时间。程序首先将时间字符串转换为 datetime 对象,并按开始时间排序。然后,使用一个列表来记录并集时间段,初始化为第一个时间段。接着,遍历剩余的时间段,如果当前时间段的开始时间在并集时间段的结束时间之前,则当前时间段与并集时间段有重叠部分,需要更新并集时间段的结束时间;否则,当前时间段与并集时间段没有重叠部分,需要将当前时间段加入并集时间段列表。最后,计算并集时间段的总分钟数,即为所求。
阅读全文