2017-01-05 134 views
1

我想檢查落入兩個不同日期的時間。 假設我需要從當天晚上10點半到明天上午7點進行檢查。檢查當前時間是否落在C#中不同日期的範圍內

TimeSpan NightShiftStart = new TimeSpan(22, 30, 0);//10:30pm 
TimeSpan NightShiftEnd = new TimeSpan(7, 0, 0); //7am 

,並比較其

if ((now > NightShiftStart) && (now < NightShiftEnd)){} 

時間跨度上這不會工作,我也嘗試

DateTime t1 = DateTime.Today.AddHours(22); 
DateTime t2 = DateTime.Today.AddDays(1).AddHours(7); 

仍然沒有運氣。

+0

你能告訴你與'DateTime'測試代碼應該工作。以爲你忘了'AddMinutes(30)'。另外,如果你總是使用今天的日期,那麼你真的只想知道時間是晚上10點30分以後,因爲它從來沒有明天。 – juharr

回答

1

您可以使用TimeOfDay property並使用它。所以,你的代碼看起來應該是這樣

if (now.TimeOfDay > NightShiftStart || now.TimeOfDay < NightShiftEnd){} 

編輯:雖然上面的代碼是罰款,你問什麼,這樣是一個比較通用的,適用於各種班次的,只要你知道什麼時候他們開始和結束:

TimeSpan ShiftStart = new TimeSpan(22, 30, 0);//10:30pm 
TimeSpan ShiftEnd = new TimeSpan(7, 0, 0); //7am 

if ((ShiftStart > ShiftEnd && (now.TimeOfDay > ShiftStart || now.TimeOfDay < ShiftEnd)) 
    || (now.TimeOfDay > ShiftStart && now.TimeOfDay < ShiftEnd)) 
{ 
    // ... 
} 

通常你應該使用> =或< =爲你想要的確切時間,也屬於你的變化的一個比較要麼ShiftStart或ShiftEnd。

+0

您需要'||'而不是'&&'。 –

+0

哦,謝謝你沒有真正想到它,但我想你也應該檢查開始是否低於結束,並以不同的方式對待它 – Staeff

+0

這不是真的與明天早上7點比較,就像它早上7點之前不管日期。 – juharr

0

試試這個,這是一個簡單而有效的方法:

private bool CheckIfTimeIsBetweenShift(DateTime time) 
{ 
    var NightShiftStart = new TimeSpan(22, 30, 0); 
    var NightShiftEnd = new TimeSpan(7, 0, 0); 

    return NightShiftStart <= time.TimeOfDay && time.TimeOfDay >= NightShiftEnd; 
} 
相關問題