我有一项服务,用户可以配置为在"非高峰"时段运行.他们可以设置服务可以运行的时间范围.
例如:
用户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是DateTimeS,你可以说
IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
Run Code Online (Sandbox Code Playgroud)