DateTime直接比大小:
DateTime now = DateTime.Now;
DateTime old = DateTime.Now - new TimeSpan(1, 0,0,0);
DateTime later = DateTime.Now + new TimeSpan(1, 0, 0, 0); ;
Assert.IsTrue(now > old);
Assert.IsTrue(now < later);
DateTime now = DateTime.Now;
DateTime old = DateTime.Now - new TimeSpan(1, 0,0,0);
DateTime later = DateTime.Now + new TimeSpan(1, 0, 0, 0); ;
Assert.IsTrue(now > old);
Assert.IsTrue(now < later);
就是TimeSpan(20,0,0)第二天的早上的:08:00:00
就是TimeSpan(24+8,0,0)前时间凌晨的02:00:00
就是TimeSpan(2,0,0) or TimeSpan(24 + 2,0,0)
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
if(now.Hour < 8 || now.Hour > 20))
{
}
TimeSpan ts = DateTime.Now.TimeOfDay;而TimeSpan可以直接比较。static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
{
throw new Exception("Not a valid time of a day");
}
// 如果起始时间晚于结束时间,反转结果
return (begin <= toCheck && toCheck <= end) ^ (begin > end);
}static void Test()
{
TimeSpan begin = TimeSpan.FromHours(20);
TimeSpan end = TimeSpan.FromHours(8);
TimeSpan toCheck = TimeSpan.Parse("02:00:00"); bool inbetween = InBetween(begin, end, toCheck); // true
}
(23-1 + 13)%23=12现在时间为5
(23-5+13)%23=8 结果<=12,在范围内现在时间为14点
(23-14+13)%23=22 结果>12 不在范围内当前时间为23点
(23-23+13)%23=13 结果>12 也不在范围内===========》
设置开始时间为0点,结果时间为2点
(23-0+2)%23=2当前时间为1
(23-1+2)%23=1 结果<=2,在范围内
当前时间为3
(23-3+2)%23=22 结果>2,不在范围内
当前时间为20
(23-20+2)%23=5 结果>2,不在范围内
!dateTimeRange.Contains(c)
if(DateTime.Now.Hour < 8 || DateTime.Now.Hour > 20))
{
}
那时因为我的代码里的逻辑错误,可以更改为如下():static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
{
throw new Exception("Not a valid time of a day");
} if (begin <= end) return begin <= toCheck && toCheck <= end;
else return begin <= toCheck || toCheck <= end;
}