【问题标题】:Check if Time Period Overlaps检查时间段是否重叠
【发布时间】:2018-05-26 08:54:58
【问题描述】:

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

有什么建议吗?

谢谢

【问题讨论】:

  • 我认为需要更多信息,您的时间间隔是否总是 24 小时?否则重叠可能只是意味着有更长的休息时间,例如停止 1 = 14.00; Start2 = 10.00 可能是 20 小时的重叠或中断。

标签: delphi


【解决方案1】:

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

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

【讨论】:

  • 我会接受这个,因为我提供的信息很少。我才意识到我在这里与自己作斗争。所以我有 3 个班次,但它们都像 1,2,3 一样,它们都必须连接起来。一个 Shift 之间不能有空的时间。所以我意识到最简单的解决方法是检查是否 Stop3=Start1 ,Stop1=Start2,Stop2=Start3 ,如果是则没关系,否则会出错,重叠或空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多