检查时间段是否重叠

时间:2018-05-26 08:54:59

标签: delphi

我有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

也许有任何提示?

谢谢

1 个答案:

答案 0 :(得分:2)

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

如果您的时间值属于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);