2014-07-21 96 views
1

我要檢查,如果給定的時間段(HH:MM)是另一種內並返回否則真應返回false時間段檢查

我已經試過這個等式

(StartTime_1 <= EndTime_2 && StartTime_2 < EndTime_1) || 
(StartTime_1 < StartTime_2 && EndTime_2 <= EndTime_1) 

但它似乎要衡量重疊,而不是任何事情,我想要的是這樣的, 例如,Start_1是上午8:00,End_1是上午10:00,任何時候在這兩者之間它應該返回true和任何其他類似(從晚上9點到08點),它將返回錯誤。

+2

'是其他one'內,你的意思完全包含在其中,或任何重疊? –

+0

完全包含 – user3808010

+0

什麼是您的數據類型? 'DateTime'? – Xaruth

回答

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 
0

如何

(StartTime_2 >= StartTime_1 && EndTime_2 <= EndTime_1) && (StartTime_1 < EndTime_1) && (StartTime_2 < EndTime_2) 

我認爲這應該做你在找什麼

3

有很多可能的情況。 enter image description here

要檢查,如果他們在任何時間點重疊,你需要檢查,如果測試時間段開始的,到底是時間1結束前,如果測試時間結束後是一段1日開始。

如果您對重疊有不同的描述,則必須通過引用圖像中的哪些行應被視爲放大或縮小來展開。

+0

還有更多的情況下,時間段共享端點,但我不會在這裏顯示它們,因爲圖像變得很難看。 –

0

使用這種方法,我可以檢查是否一個週期(START2到END2)包含在另一個(啓動1至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); 
}