我有一项服务,用户可以配置为在“非高峰”时段运行。他们可以设置服务可以运行的时间范围。
例如:
用户A的工作时间为早上8点至下午5点,因此他们希望将应用安排在下午5:30至7:30之间运行。
用户B的工作时间是晚上9点至早上6点,所以他们安排应用程序在早上6:30到晚上8:30之间运行。
重点是应用程序使用他们的计算机而不是。
给定当前时间的DateTime,开始的DateTime和停止时间的DateTime,如何检查当前时间是否在开始和停止之间。
对我而言,棘手的部分是时间可以跨越午夜边界。
答案 0 :(得分:45)
如果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;
}
}
(注意:此代码假定如果start == end
,那么它将涵盖所有时间。您在另一篇帖子上对此效果发表了评论)
例如,检查是否在凌晨5点到9点半之间
IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0))
如果startTime
和endTime
为DateTime
,您可以说
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!!!