首页 > 解决方案 > 检查时间段是否重叠

问题描述

我有 3 个可配置的时间间隔,现在设置为:

1 06:00 - 14:30
2 14:30 - 23:00
3 23:00 - 06:00

如果用户更改时间间隔,我想检查时间间隔是否重叠,然后阻止更改。

但我不知道该怎么做,我用谷歌搜索,我用了一点 IRC,他们告诉我我可以做到:

Start1 < Stop3
Start2 < Stop1
Start3 < Stop2

在我设置之前,这会很好用

Stop3 = 23:00
Start1 = 00:00

也许有任何提示?

谢谢

标签: delphi

解决方案


由于时间段可能会延长到第二天,因此您必须添加一个虚构的日期。

如果您的时间值属于一种TTime类型,并且测试变量属于一种TDateTime类型:

if (StartTime1 > StopTime1) then begin // Extend time to next day
  StartDT1 := StartTime1;
  StopDT1 := DateUtils.IncDay(StopTime1,1);
end
else begin
  StartDT1 := StartTime1;
  StopDT1 := StopTime1;      
end;  

对所有三个间隔执行此操作。

然后很容易检查与此测试的重叠:

overlap := (StartDT1 < StopDT2) and (StartDT2 < StopDT1) or
           (StartDT1 < StopDT3) and (StartDT3 < StopDT1) or
           (StartDT2 < StopDT3) and (StartDT3 < StopDT2);

推荐阅读