2012-02-19 106 views
1

我正在制定一個預訂系統,用戶可以在其中進行預約。 我需要做的是確保會議不會衝突時間明智。衝突預訂比較使用CompareTo的日期時間

例如: 會議1是從13:00到14:00。會議2從13:30到14:30。

這些會議發生衝突,因此不應進行預訂。

現在,當我嘗試這樣做,我沒有得到期望的結果,有時它認爲預訂不應該讓當它真的應該,反之亦然。

這裏是我的代碼:

if (OldBookingDate.Equals(NewBookingDate)) 
       { 
        // Check if (OldBookingTime -> OldEndTime) clashes with (NewBookingTime -> NewEndTime) 
        // For Example (10:00 -> 12:00), (09:00 -> 11:00) 
        // So this Clashes! 
        DateTime OldBookingTime_End = OldBookingTime_Start.AddHours(OldDurationInt); 
        DateTime NewBookingTime_End = NewBookingTime_Start.AddHours(NewDurationInt); 

        int Clash1 = OldBookingTime_Start.CompareTo(NewBookingTime_Start); 
        int Clash2 = OldBookingTime_End.CompareTo(NewBookingTime_End); 
        if ((Clash1 < 0) || (Clash2 > 0)) 
        { 
         // If Clash1 -> Finishes before Meeting 
         // If Clash2 -> Finishes after Meeting 
         Available = true; 
        } 
        if ((Clash1 == 0) || (Clash2 == 0)) 
        { 
         // Start and end is the same 
         Available = false; 
        } 
        if ((Clash1 > 0) || (Clash2 < 0)) 
        { 
         // Intersects/Clashes with already booked meeting 
         Available = false; 
        } 
       } 

主要問題似乎是與((Clash1 > 0) || (Clash2 < 0)) if語句作爲當預訂應在第一(如果可用),以真實的陳述集(因爲它應該),但是這if語句然後將其設置爲false。

我如何可以執行這些檢查正常,確保時間不會衝突?

回答

1

試試這個:

bool clashing = (OldBookingTime_Start <= NewBookingTime_End) 
      && (NewBookingTime_Start >= OldBookTime_End); 

Available = !clashing; 

參見:

Determine Whether Two Date Ranges Overlap

+0

將這項工作,而不是具有衆多的if語句? – Mac 2012-02-19 14:30:26

+0

是的,也刪除第一個'如果(OldBookingDate.Equals(NewBookingDate))'檢查。 – 2012-02-19 14:33:22

+0

非常感謝,很好。 – Mac 2012-02-19 15:49:37