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

sco*_*ttm 21 c# datetime

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

例如:

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

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

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

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

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

Dan*_*ant 45

如果startTimeendTime表示单个时间间隔(它只会发生一次,并startTimeendTime代表的日期和开始/停止的时间),那么它的话容易

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)

如果startTimeendTimeDateTimeS,你可以说

IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
Run Code Online (Sandbox Code Playgroud)