如何检查当前时间是否介于时间范围内?

我有一项服务,用户可以配置为在“非高峰”时段运行。 他们可以设置服务可以运行的时间范围。

例如:

用户A上午8点至下午5点工作,因此他们希望安排应用程序在下午5:30至7:30之间运行。

用户B工作时间为晚上9点至早上6点,因此他们安排应用程序在早上6:30到晚上8:30之间运行。

关键是应用程序使用他们的计算机而不是。

给定当前时间的DateTime,开始的DateTime和停止时间的DateTime,如何检查当前时间是否在开始和停止之间。

对我来说棘手的部分是时间可以越过午夜边界。

如果startTimeendTime表示单个时间间隔(它只发生一次, startTimeendTime表示开始/停止的日期和时间),那么就像说

 bool isTimeBetween = someTime >= startTime && someTime <= endTime; 

如果它是一个重复发生的事件(每天发生,在某个时间间隔内发生),您可以使用TimeOfDay属性进行比较。 (反复出现的案例是您必须考虑跨越午夜的开始/停止的情况)

 static public bool IsTimeOfDayBetween(DateTime time, TimeSpan startTime, TimeSpan endTime) { if (endTime == startTime) { return true; } else if (endTime < startTime) { return time.TimeOfDay <= endTime || time.TimeOfDay >= startTime; } else { return time.TimeOfDay >= startTime && time.TimeOfDay <= endTime; } } 

(注意:此代码假设如果start == end ,则它会覆盖所有时间。您在另一篇文章中对此效果发表了评论)

例如,检查是否在凌晨5点到9点30分之间

 IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0)) 

如果startTimeendTimeDateTime ,你可以说

 IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay) 

因此,我假设您想知道是否给出一天的开始时间和结束时间(不包括实际日期,即1/1/1900或类似的东西),看看是否有另一个时间与时间由开始和结束指定。 例如,如果开始时间是晚上9点,结束时间是早上9点,则接受晚上10点但拒绝上午10点。

您可以按时间范围类型(​​时间相等,结束是在开始之后,结束在开始之前)这样做,这很简单:

 if (end==start) return true else if (end>start) return start<=time && time<=end else return !(time>end && time 

或者你可以扩展开始和结束的范围,这样结束总是在开始之后如此:

 if (end<=start) end += <24 hours> if (time return time<=end 

我假设你在应用程序配置文件中保存了开始和结束时间,所以你基本上要做的就是让你的应用程序在“开始时间”发生时将标志设置为“on”并将其设置为“off”当停止时间发生时。

这样你就不必经常检查“现在”是否“在开始和结束之间”时间。

if(current> = start && current <= stop)

(或没有=)

我想这就是你需要的一切吗?

午夜边界是一个红色的鲱鱼 – 你需要知道的是两个比较的状态。

如果您以不同的方式处理周末,那么您还有其他逻辑,但基本比较很简单。

 DateTime t1; t1 = DateTime.Now; // loop inbetween start and end time if (t1>=start_time &&t1<=end_time) { //your code / action } //if you are using sql to get values start_time = Convert.ToDateTime(row.Cells[10].Text); end_time = Convert.ToDateTime(row.Cells[11].Text); //convert them to string or you will get some error!!!