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
也许有任何提示?
谢谢
解决方案
由于时间段可能会延长到第二天,因此您必须添加一个虚构的日期。
如果您的时间值属于一种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);
推荐阅读
- rename - 使用条件批量重命名文件
- xml - 正则表达式 xpath 从正文 xml 中删除特定节点
- c# - ajax 解释 FileContentResult 返回类型
- mysql - 如何从两个表中的值计算 GPA
- spring - 从 WSL 启动 Spring Boot 时控制器返回 404
- r - 如何使用 rowwise 进行并行处理
- sql - 如何在 DATE 数据类型列中插入 DDMMYYYY 值
- save - 如何在 DeepChem 中保存 MultitaskClassifier 模型?
- laravel - 在 Laravel 8 路由中允许多个中间件范围
- javascript - Vue