蟒时间间隔算法总和(python time interval algorithm sum)

2019-08-02 08:55发布

假设我有2个时间间隔,如16:30 - 20:00和15:00 - 19:00,我需要找到这两个区间之间的总时间,所以结果是5小时(我补充两个区间和减去交叉间隔),如何可以写一个通用功能这也与所有情况下涉及内部的其他(所以结果是的大的一个)的时间间隔,没有交点(所以结果是两个间隔的总和),诸如一个间隔。

我的传入的数据结构是原始的,简单地所以可能需要字符串如“15:30”的转化率。

谢谢

Answer 1:

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


Answer 2:

我假设你可以做转换成类似日期时间你自己。

两者之和间隔,然后减去任何重叠。 您可以通过比较各两个范围的最小值和最大值得到的重叠。



Answer 3:

代码时存在重叠,请把它添加到您的解决方案之一:

def interval(i1, i2):
    minstart, minend = [min(*e) for e in zip(i1, i2)]
    maxstart, maxend = [max(*e) for e in zip(i1, i2)]

    if minend < maxstart: # no overlap
        return minend-minstart + maxend-maxstart
    else: # overlap
        return maxend-minstart


Answer 4:

你会想你的字符串转换成日期时间。 你可以做到这一点datetime.datetime.strptime

鉴于间隔datetime.datetime对象,如果间隔:

int1 = (start1, end1)
int2 = (start2, end2)

那么是不是只是:

if end1 < start2 or end2 < start1:
    # The intervals are disjoint.
    return (end1-start1) + (end2-start2)
else:
    return max(end1, end2) - min(start1, start2)


文章来源: python time interval algorithm sum