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

时间:2009-02-26 20:17:42

标签: c# datetime

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

例如:

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

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

重点是应用程序使用他们的计算机而不是。

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

对我而言,棘手的部分是时间可以跨越午夜边界。

5 个答案:

答案 0 :(得分:45)

如果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点半之间

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

如果startTimeendTimeDateTime,您可以说

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

答案 1 :(得分:2)

所以我假设您想知道是否给出一天的开始时间和结束时间(不包括实际日期,即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<start)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

if(current&gt; = start&amp;&amp; current&lt; = stop)

(或没有=)

我认为这就是你所需要的一切?

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

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

答案 4 :(得分:-1)

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!!!