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