Delphi 检查时间段是否重叠

Delphi 检查时间段是否重叠,delphi,Delphi,我有3个可配置的时间间隔,现在设置为: 1 06:00 - 14:30 2 14:30 - 23:00 3 23:00 - 06:00 如果用户更改了时间间隔,我想检查时间间隔是否重叠,然后防止更改 但我不知道如何做到这一点,我在谷歌上搜索,我使用了一些IRC,他们告诉我我可以做到: Start1 < Stop3 Start2 < Stop1 Start3 < Stop2 有什么建议吗 谢谢由于时间段可能会延长到第二天,您必须添加虚拟日期 如果您的时间值为TTime类型,且

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

1 06:00 - 14:30
2 14:30 - 23:00
3 23:00 - 06:00
如果用户更改了时间间隔,我想检查时间间隔是否重叠,然后防止更改

但我不知道如何做到这一点,我在谷歌上搜索,我使用了一些IRC,他们告诉我我可以做到:

Start1 < Stop3
Start2 < Stop1
Start3 < Stop2
有什么建议吗


谢谢

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

如果您的时间值为
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);
重叠:=(StartDT1
由于时间段可能会延长到第二天,因此必须添加虚拟日期

如果您的时间值为
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);
重叠:=(StartDT1
我认为需要更多的信息,您的间隔时间是否总是包括24小时?否则,重叠可能仅仅意味着有更长的中断,例如Stop1=14.00;Start2=10.00可能是一个重叠或20小时的休息时间。我认为需要更多的信息,你的间隔时间总是24小时吗?否则,重叠可能仅仅意味着有更长的中断,例如Stop1=14.00;Start2=10.00可能是重叠或中断20小时。我会接受这一点,因为我提供的信息很少。我才意识到我在这里和自己作对。所以我有3个班次,但它们都像1,2,3,它们都必须连接起来。轮班之间不可能有空闲时间。所以我意识到最简单的解决方法就是检查Stop3=Start1,Stop1=Start2,Stop2=Start3,如果是,那么就可以了,否则就是错误、重叠或空格。我接受这一点,因为我提供的信息很少。我才意识到我在这里和自己作对。所以我有3个班次,但它们都像1,2,3,它们都必须连接起来。轮班之间不可能有空闲时间。所以我意识到最简单的解决方法就是检查Stop3=Start1,Stop1=Start2,Stop2=Start3,如果是,那么就可以了,否则就是错误、重叠或空格。