[英]Check if datetime is within range
我正在尝试查看日期时间是否在另一个日期时间的范围内。
基本上,我有两个列表。 一个包含潜在事件的时间,一个包含人们不可用的时间。 我想交叉引用它们以检查当人们不在时事件不会运行。
我现在有这个功能,但实际上在 if 语句的配置工作中遇到了一些麻烦,因为我弄错了它们并且错误地删除了日期。
def check_times(event_times, unavailable_times):
for event_time in event_times:
for unavailable_time in unavailable_times:
if (event_time[0] >= unavailable_time[1]) and (event_time[1] >= unavailable_time[2])
event_times.remove(event_time)
break
下文中,unavailable_times[1] 是指该人不可用的时间的开始,而available_times[2] 是该时间结束的时间。 event_times[0] 是事件的开始时间, event_times[1] 是事件的结束时间。
本质上,假设我希望会议在 13:30 - 15:00 举行,但 X 人在 14:15 - 14:40 很忙。 然后我想忽略 13:30 - 15:00 期间。 我只是在配置 if 语句以反映这一点时遇到了一些困难。
首先,我注意到您的代码中有几个拼写错误。 您在if
条件语句中指的是event_times
和unavailable_times
,而您应该指的是event_time
和unavailable_time
(没有尾随s
)。
其次,算法不捕获所有的在其中的情况下event_time
重叠给出unavailable_time
。 它们最好按如下方式进行可视化,其中E--E
表示event
间隔, U--U
表示unavailable
间隔。
# Case 1:
E---------E
U---------U
# Case 2:
E---------E
U---------U
# Case 3:
E---------------------E
U---------U
# Case 4:
E---E
U---------U
这些情况完全由以下条件语句捕获:
(event_time[0] < unavailable_time[1]) and (event_time[1] > unavailable_time[1])
(event_time[0] > unavailable_time[1]) and (event_time[0] < unavailable_time[2])
编辑:所以你的最终功能可能是:
def check_times(event_times, unavailable_times):
for event_time in event_times:
for unavailable_time in unavailable_times:
if ((event_time[0] < unavailable_time[1]) and (event_time[1] > unavailable_time[1])) or\
((event_time[0] > unavailable_time[1]) and (event_time[0] < unavailable_time[2])):
event_times.remove(event_time)
break
我认为最简单的方法是假设事件与不可用时间重叠,那么事件的结束必须在不可用时间开始之后。 那么你只需要检查事件的开始是否在不可用时间之后。 像这样的东西:
def check_times(event_times, unavailable_times):
for event_time in event_times:
for unavailable_time in unavailable_times:
if (event_time[1] >= unavailable_time[1]) and !(event_time[0] >= unavailable_time[2])
event_times.remove(event_time)
break
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.