检测重叠时间段的算法 [重复]

内容来自 DOC https://q.houxu6.top/?s=检测重叠时间段的算法 [重复]

我需要检测两个时间段是否重叠。

每个时间段都有一个开始日期和结束日期。

我需要检测我的第一个时间段(A)是否与另一个时间段(B/C)重叠。

在我的情况下,如果B的开始等于A的结束,则它们不重叠(反之亦然)。

我发现了以下情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以我现在做法如下:

tStartA < tStartB && tStartB < tEndA //对于情况1
OR
tStartA < tEndB && tEndB <= tEndA //对于情况2
OR
tStartB < tStartA  && tEndB > tEndA //对于情况3

(情况4在情况1或情况2中考虑)

有效,但似乎不是非常高效。

因此,首先在C#中是否有一个现有的类可以建模(即具有固定开始日期的时间段),类似TimeSpan?

其次,是否已经有C#代码(例如DateTime类)可以处理这种情况?

第三,如果没有,你会采取什么方法使这种比较最快?


判断两个时间段是否重叠的简单方法:

bool overlap = a.start < b.end && b.start < a.end;

或者在你的代码中:

bool overlap = tStartA < tEndB && tStartB < tEndA;

(如果你改变主意,想说两个时间段只要相互接触就重叠了,请使用 <=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值