我想检查给定的时间段(HH:MM)是否在另一个时间内并返回true,否则它将返回false
我试过这个等式
(StartTime_1 <= EndTime_2 && StartTime_2 < EndTime_1) ||
(StartTime_1 < StartTime_2 && EndTime_2 <= EndTime_1)
但似乎衡量重叠而不是任何事情,我想要的是这样的, 例如,Start_1是08:00 AM,End_1是10:00 PM,在这两者之间的任何时间它都将返回true和任何其他类似(从09 PM到08 AM)它将返回false。
答案 0 :(得分:3)
有许多可能的情况。
要检查它们是否在任何时间点重叠,您需要检查测试时间段的结束是否在时间段1结束之前,以及测试时间结束是否在时间段1开始之后。
如果您对重叠有不同的描述,则必须通过引用图像中的哪些行进行扩展来进行扩展。
答案 1 :(得分:0)
很难从你的变量名称中辨别出来,但看起来你差不多了。要测试真正的遏制,您只需要始终使用“和”(&&
):
DateTime AllowedStart;
DateTime AllowedEnd;
DateTime ActualStart;
DateTime ActualEnd;
//Obviously you should populate those before this check!
if (ActualStart > AllowedStart && //Check the start time
ActualStart < AllowedEnd && //Technically not necessary if ActualEnd > ActualStart
ActualEnd < AllowedEnd && //Check the end time
ActualEnd > AllowedStart) //Technically not necessary if ActualEnd > ActualStart
答案 2 :(得分:0)
怎么样
(StartTime_2 >= StartTime_1 && EndTime_2 <= EndTime_1) && (StartTime_1 < EndTime_1) && (StartTime_2 < EndTime_2)
我认为这应该做你正在寻找的事情
答案 3 :(得分:0)
使用这种方法,我可以检查一个句点(start2到end2)是否包含在另一个句子中(start1到end1)
public static Boolean IsContained(DateTime start1, DateTime end1, DateTime start2, DateTime end2)
{
// convert all DateTime to Int
Int32 start1_int = start1.Hour * 60 + start1.Minute;
Int32 end1_int = end1.Hour * 60 + end1.Minute;
Int32 start2_int = start2.Hour * 60 + start2.Minute;
Int32 end2_int = end2.Hour * 60 + end2.Minute;
// add 24H if end is past midnight
if (end1_int <= start1_int)
{
end1_int += 24 * 60;
}
if (end2_int <= start2_int)
{
end2_int += 24 * 60;
}
return (start1_int <= start2_int && end1_int >= end2_int);
}