怎么判断当前时间是否在设定的时间范围内?

问题描述:

比如两个时间段
8:30-20:30(一天之内)
21:00-8:30(跨天)
我获取了操作系统的当前时间,怎么判断它在哪个区间段?
主要是第二个时间段涉及到了跨天不好判断。

你c++的我不会编码,给个思路吧,如果你开始和结束时间不会有交叉的话,即不出现21:00-22:00(跨天),那么就判断,

1.开始时间小于结束时间就是不夸天,不夸天就直接判断当前时间是否大于等于开始时间并且小于等于结束时间,
2.如果开始时间大于结束时间,就是跨天了,那么就判断当前时间是需要大于等于开始时间或者小于等于结束时间,

就是说你首先先判断你这个设定的时间范围是否跨天,然后把当前时间的小时和分钟拿出来做比较,
或者在此基础上把年月日拼进你设置的时间,跨天就加一天就好了,然后应该有工具类直接比较两个时间的吧,
我觉得应该是可以这样做的

你给的第一个时间也不能判断是一天之内的吧,可能是第一天的8:30-第二天的20:30;所以还是需要获取当前日期才能判断!

AND tp.create_date >#{startDate}
AND tp.create_date <#{endDate}
可以试试

设定时间范围 当天 8.30 - 当天 20.30 当天 21.00 - 第二天 8.00 这个是要定义出来的

比如: 2017-11-01 8.30 2017-11-01 20.30 这个定义起来很简单了 那么接下来的判断不就更简单了 获取当前时间 判断

当天8.30 <= time <=当天 20.30 当天 21.00 <= time <= 第二天 8.00

谢谢各位大佬,最后我参照了Zhou Zhaoxiong的实现,和huangjian_jj 的思路很像,再次表示诚挚的感谢!

/**************

  • 版权所有 (C)2015, Zhou Zhaoxiong。 *
  • 文件名称:TimeSpan.c
  • 文件标识:无
  • 内容摘要:判断当前时间是否在配置的时间的范围内
  • 其它说明:无
  • 当前版本:V1.0
  • 作 者:Zhou Zhaoxiong
  • 完成日期:20150617 * **************/

BOOL CMarkNormalDlg::IsInTimeSpan(CLOCKINFO *pTimeNow, CLOCKINFO *pBeginTime, CLOCKINFO *pEndTime)
{
int iBegLessThanEnd = 0; // 1-配置的开始时间小于结束时间 0-配置的开始时间大于结束时间

if (pBeginTime->hour < pEndTime->hour || (pBeginTime->hour == pEndTime->hour && pBeginTime->minute <= pEndTime->minute))
{
    iBegLessThanEnd = 1;
}
else
{
    iBegLessThanEnd = 0;
}

if (iBegLessThanEnd)   // 开始时间小于结束时间
{
    if ((pTimeNow->hour > pBeginTime->hour || (pTimeNow->hour == pBeginTime->hour && pTimeNow->minute >= pBeginTime->minute))
        && (pTimeNow->hour < pEndTime->hour || (pTimeNow->hour == pEndTime->hour && pTimeNow->minute <= pEndTime->minute)))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
else   // 开始时间大于结束时间, 跨天的情况
{
    if ((pTimeNow->hour > pBeginTime->hour || (pTimeNow->hour == pBeginTime->hour && pTimeNow->minute >= pBeginTime->minute))
        || (pTimeNow->hour < pEndTime->hour || (pTimeNow->hour == pEndTime->hour && pTimeNow->minute <= pEndTime->minute)))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

}