我有一个datetime.time()从不同日期获得的范围列表,按 排序init,我需要考虑重叠时间来获得输出。例如,
[{'init': datetime.time(10,0,0), 'end': datetime.time(12,0,0)},
{'init': datetime.time(11,0,0), 'end': datetime.time(12,30,0)},
{'init': datetime.time(22,0,0), 'end': datetime.time(4,30,0)},
{'init': datetime.time(23,0,0), 'end': datetime.time(0,30,0)}]
输出应该是:
[{{'init': datetime.time(10,0,0), 'end': datetime.time(12,30,0)},
{'init': datetime.time(22,0,0), 'end': datetime.time(4,30,0)}
为此,我遍历列表中的每个项目,根据是否满足条件更新 init 和 end 值(即该项目与前一个项目完全或部分重叠)。
x, y = range_list[0]['init'], range_list[0]['end']
for range in range_list:
if range['init'] <= y:
if range['end'] > y:
y = range['end']
else:
print(x, y)
x = range['init']
y = range['end']
但是,按照此逻辑,我无法处理隔夜范围,因为例如,22:00:00不小于04:30:00.
当我控制输入数据时,我想返回带有完整datetime对象的列表,或者timestamp像
[{'init': datetime.time(2019,1,12,10,0,0), 'end': datetime.time(2019,1,12,12,0,0)},
{'init': datetime.time(2019,1,13,11,0,0), 'end': datetime.time(2019,1,13,12,30,0)},
{'init': datetime.time(2019,1,14,22,0,0), 'end': datetime.time(2019,1,15,4,30,0)},
{'init': datetime.time(2019,1,16,23,0,0), 'end': datetime.time(2019,1,17,0,30,0)}]
但是,这将不起作用,因为由于日期的原因,每个项目都比前一个项目高。
那么,我该如何解决这个问题呢?
TL; 博士; 如果使用完整datetime或timestamp不是一个选项,如何在一夜之间处理时间范围?
万千封印
相关分类