繁体   English   中英

检查日期时间是否在范围内

[英]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_timesunavailable_times ,而您应该指的是event_timeunavailable_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

这些情况完全由以下条件语句捕获:

  1. (event_time[0] < unavailable_time[1]) and (event_time[1] > unavailable_time[1])
  2. (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM