时间段检查

时间:2014-07-21 16:07:26

标签: c#

我想检查给定的时间段(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。

4 个答案:

答案 0 :(得分:3)

有许多可能的情况。 enter image description here

要检查它们是否在任何时间点重叠,您需要检查测试时间段的结束是否在时间段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);
}