假设我有2个时间间隔,例如16:30 – 20:00和15:00 – 19:00,我需要找到这两个间隔之间的总时间,所以结果是5个小时(我添加两个间隔并减去交叉间隔),我怎样才能编写一个通用函数,它也处理所有情况,例如其他区间内的一个区间(因此结果是较大区间的区间),没有交点(因此结果是两个区间的总和).
我的传入数据结构是原始的,只是字符串像“15:30”,因此可能需要转换.
谢谢
解决方法:
from datetime import datetime, timedelta
START, END = xrange(2)
def tparse(timestring):
return datetime.strptime(timestring, '%H:%M')
def sum_intervals(intervals):
times = []
for interval in intervals:
times.append((tparse(interval[START]), START))
times.append((tparse(interval[END]), END))
times.sort()
started = 0
result = timedelta()
for t, type in times:
if type == START:
if not started:
start_time = t
started += 1
elif type == END:
started -= 1
if not started:
result += (t - start_time)
return result
从问题中测试您的时间:
intervals = [
('16:30', '20:00'),
('15:00', '19:00'),
]
print sum_intervals(intervals)
打印:
5:00:00
与不重叠的数据一起测试
intervals = [
('16:30', '20:00'),
('15:00', '19:00'),
('03:00', '04:00'),
('06:00', '08:00'),
('07:30', '11:00'),
]
print sum_intervals(intervals)
结果:
11:00:00