我有一项服务,用户可以配置为在"非高峰"时段运行.他们可以设置服务可以运行的时间范围.
例如:
用户A上午8点至下午5点工作,因此他们希望安排应用程序在下午5:30至7:30之间运行.
用户B工作时间为晚上9点至早上6点,因此他们安排应用程序在早上6:30到晚上8:30之间运行.
关键是应用程序使用他们的计算机而不是.
给定当前时间的DateTime,开始的DateTime和停止时间的DateTime,如何检查当前时间是否在开始和停止之间.
对我来说棘手的部分是时间可以越过午夜边界.
如果startTime
和endTime
表示单个时间间隔(它只会发生一次,并startTime
和endTime
代表的日期和开始/停止的时间),那么它的话容易
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; } }
(注意:此代码假设if start == end
,则它涵盖所有时间.您在另一篇文章上对此效果发表评论)
例如,检查是否在凌晨5点到9点30分之间
IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0))
如果startTime
和endTime
是DateTime
S,你可以说
IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)