标记重叠的日期时间范围

时间:2018-03-19 15:03:12

标签: python datetime

我有以下格式的元组:

tup = [('15MAR18 103000', '15MAR18 103758'), ('15MAR18 103555', '15MAR18 121308')] etc...

格式为tup = [(a,b), (a,b)],其中a = start_endb = end_time

我试图标记开始和结束之间的日期是否与任何其他开始和结束日期时间冲突......

然后我需要标记它是否碰撞并插入每个嵌套元组'Y / N'

我并不完全需要如何构建逻辑。

我想我需要找出是否有任何开始时间小于上一个结束时间。

for x in range(0, len(tup)):
    if tup[x-1][0] > tup[x][1]
     .....

1 个答案:

答案 0 :(得分:0)

这是蛮力方法。有优化的余地。

from datetime import datetime

nested_tup = [('15MAR18 103000', '15MAR18 103758'),
              ('15MAR18 103555', '15MAR18 121308'),
              ('16MAR18 103555', '16MAR18 121308')]

def check_overlap(x, lst):
    for i in lst:
        if (i[0] < x[0] < i[1]) or (i[0] < x[1] < i[1]):
            return True
    else:
        return False

lst = [tuple(datetime.strptime(i, '%d%b%y %H%M%S') for i in x) for x in nested_tup]

res = [check_overlap(x, lst) for x in lst]

nested_tup = [i + (j,) for i, j in zip(nested_tup, res)]

# [('15MAR18 103000', '15MAR18 103758', True),
#  ('15MAR18 103555', '15MAR18 121308', True),
#  ('16MAR18 103555', '16MAR18 121308', False)]