【问题标题】:logic to determine if two time periods overlap (including overnight cases)确定两个时间段是否重叠的逻辑(包括隔夜情况)
【发布时间】:2021-09-03 04:30:26
【问题描述】:

需要逻辑帮助以确定两个时间段是否重叠

假设:

  1. 时间段小于 24 小时
  2. 如果结束时间小于开始时间,则为通宵时间
  3. 时间段的边界不包含在内(即06:00-07:00 不与07:00-08:0005:00-06:00 重叠)

示例: A = (07:00-17:00) P = (12:00-22:00) N = (22:00-08:00) (overnight)

确定任何给定时间段是否与 A、P 或 N 重叠的逻辑是什么

【问题讨论】:

  • 所以11:00-11:00 是 0 小时(不是 24 小时)?是否与10:00-12:00重叠?
  • 最长 23 小时 59 分钟 (11:00-10:59) 最短 1 分钟 (00:00-00:01)

标签: datetime math logic


【解决方案1】:

也许揭示相交事实的最简单方法是将过夜划分为成对的间隔,所以

N = (22:00-08:00) 变为 N1 = (22:00-24:00)N2 = (00:00-08:00)

然后做简单的区间交集:

if (C.Start >= N1.End or C.End <= N1.Start) and (C.Start >= N2.End or C.End <= N2.Start):
       no intersection
second comparison if C consists of two intervals too
     

似乎“不包含”的边界不会影响比较的正确性

角度间隔有特殊的方法,但在这里使用它们看起来过于复杂。

【讨论】:

  • 你能解释一下关于开始时间和结束时间的必要检查的逻辑细节吗?
  • 更正错误条件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2016-02-14
  • 1970-01-01
  • 2016-06-02
  • 2021-08-18
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多