2017-01-05 102 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; 
} 
相关问题