打印
[STM32F1]

怎么判断一个时间点 在24小时的哪个时间段

[复制链接]
8732|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子过客|  楼主 | 2016-9-8 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
把24小时分成4个时间段
时间段1,8:00-12:00  
时间段2,12:00- 18:00
时间段3,18:00- 22:00
时间段4, 22:00-8:00
这4个时间段把24小时 任意划分的
怎么判快速判断给出的时间点 是在哪个时间段





沙发
kk118a| | 2016-9-8 16:01 | 只看该作者
判断范围啊

使用特权

评论回复
板凳
电子过客|  楼主 | 2016-9-8 16:16 | 只看该作者

我的思路是把时间 小时和分钟转化成一个数值变量
和给出的变量进行比较

如果24小时分割是
00 :00 -6:00
6:00-12:00
12:00- 20:00
20:00 -24:00
进行比较可以
判断在哪个范围

如果是
时间段1,8:00-12:00  
时间段2,12:00- 18:00
时间段3,18:00- 22:00
时间段4, 22:00-8:00

怎么判断大小,



使用特权

评论回复
地板
电子过客|  楼主 | 2016-9-8 16:18 | 只看该作者
电子过客 发表于 2016-9-8 16:16
我的思路是把时间 小时和分钟转化成一个数值变量
和给出的变量进行比较

void  OBJ_TEMP_TIME( void)

{
              Objtemp_Begin_time1=Objtemp_Begin_th1*60+Objtemp_Begin_tm1;//变成一个参数
       
              Objtemp_End_time1=Objtemp_End_th1*60+Objtemp_End_tm1;
          
              Objtemp_Begin_time2=Objtemp_Begin_th2*60+Objtemp_Begin_tm2;//变成一个参数
       
              Objtemp_End_time2=Objtemp_End_th2*60+Objtemp_End_tm2;
       
              Objtemp_Begin_time3=Objtemp_Begin_th3*60+Objtemp_Begin_tm3;//变成一个参数
       
              Objtemp_End_time3=Objtemp_End_th3*60+Objtemp_End_tm3;
       
              Objtemp_Begin_time4=Objtemp_Begin_th4*60+Objtemp_Begin_tm4;//变成一个参数
       
              Objtemp_End_time4=Objtemp_End_th4*60+Objtemp_End_tm4;
       
              Presenttemp_time=timer.hour*60+timer.min;

       
             if(Presenttemp_time>=Objtemp_Begin_time1&&Presenttemp_time<Objtemp_End_time1)//判断是否在第一个时间段
                                
                               {  Presenttemp_value= Objtemp_time1_temp;  usRegHoldingBuf[27]=Objtemp_time1_temp;     }

            else if( Presenttemp_time>=Objtemp_Begin_time2&&Presenttemp_time<Objtemp_End_time2)//判断是否在第二个时间段
                  
                         {  Presenttemp_value=  Objtemp_time2_temp;  usRegHoldingBuf[27]= Objtemp_time2_temp;        }
                       
                  else        if( Presenttemp_time>=Objtemp_Begin_time3&&Presenttemp_time<Objtemp_End_time3)//判断是否在第三个时间段
                       
             {  Presenttemp_value= Objtemp_time3_temp;   usRegHoldingBuf[27]=Objtemp_time3_temp; }
            
                  else        if(Presenttemp_time>=Objtemp_Begin_time4&&Presenttemp_time<Objtemp_End_time4)//判断是否在第四个时间段
                 
                                {  Presenttemp_value= Objtemp_time4_temp;   usRegHoldingBuf[27]=Objtemp_time4_temp;   }


}

有时候第四个时间段结束的时间比开始的时间数值要小

使用特权

评论回复
5
zhanzr21| | 2016-9-8 17:33 | 只看该作者
0點0分0秒為0
每小時每分鐘每秒逐次加
其實C Library就有這樣的轉換函數

使用特权

评论回复
6
电子过客|  楼主 | 2016-9-8 17:42 | 只看该作者
zhanzr21 发表于 2016-9-8 17:33
0點0分0秒為0
每小時每分鐘每秒逐次加
其實C Library就有這樣的轉換函數

没有明白您的意思,能举个例子吗

使用特权

评论回复
7
七颗咖啡豆| | 2016-9-8 17:59 | 只看该作者
本帖最后由 七颗咖啡豆 于 2016-9-8 18:00 编辑

typedef{
u8   hour;
u8   min;
u8   sec;
}_Time;
_Time   time,time01,time02,time03,time04;//time01  8:00  ...........  time04  22:00    注意始终保证time01为最小值  time04为最大值
if(time.hour>time01.hour && time.min>time01.min && time.hour<=time02.hour && time.min<=time02.min)
{
return  01;
}
.........
if((time.hour<=time01.hour && time.min<=time01.min) ||( time.hour>time04.hour && time.min>time04.min))
{
return  04;
}

使用特权

评论回复
8
电子过客|  楼主 | 2016-9-8 18:12 | 只看该作者
七颗咖啡豆 发表于 2016-9-8 17:59
typedef{
u8   hour;
u8   min;

如果目前时间是2:01
时间段是1:02到3:03还是会false

使用特权

评论回复
9
泰山特曲123| | 2016-9-8 18:31 | 只看该作者
就你那个例子,判断小时就行了

使用特权

评论回复
10
electronlao| | 2016-9-8 18:34 | 只看该作者
把所有时间转换成秒,比较大小。

使用特权

评论回复
11
电子过客|  楼主 | 2016-9-8 18:44 | 只看该作者
electronlao 发表于 2016-9-8 18:34
把所有时间转换成秒,比较大小。

最小单位是分钟就够了

使用特权

评论回复
12
john_lee| | 2016-9-8 19:24 | 只看该作者
如果划分的粒度是整小时,那么查表就可以了;如果是分钟,表太大,还是老老实实比较吧。

使用特权

评论回复
13
mmuuss586| | 2016-9-8 19:32 | 只看该作者
学习下;

使用特权

评论回复
14
电子过客|  楼主 | 2016-9-8 19:36 | 只看该作者
john_lee 发表于 2016-9-8 19:24
如果划分的粒度是整小时,那么查表就可以了;如果是分钟,表太大,还是老老实实比较吧。 ...

划分单位是分钟了,
某个时间点指点是的范围是在0-1440
但是
时间段1, 8:00-12:00  
时间段2, 12:00- 18:00
时间段3, 18:00- 22:00
时间段4,  22:00-8:00
时间段的范围是  要在0-1440  内  时间段 4,的范围在240 到1320 了 这个范围在时间段1,2,3 都能成立
做比较条件判断太多, 您能举个例子指点下吗

使用特权

评论回复
15
john_lee| | 2016-9-8 20:37 | 只看该作者
简单点,把跨天的时间段安排在最后(实际上不用安排存储),只比较前3个,如果都不是,那就是第4个。

使用特权

评论回复
16
llh1979| | 2016-9-8 21:06 | 只看该作者
用秒计时,显示时转换一下,只要比较一下大小就好了

使用特权

评论回复
17
电子过客|  楼主 | 2016-9-8 21:40 | 只看该作者
john_lee 发表于 2016-9-8 20:37
简单点,把跨天的时间段安排在最后(实际上不用安排存储),只比较前3个,如果都不是,那就是第4个。 ...

如果客户是在第3个时间段设置22:00--8:00点呢

使用特权

评论回复
18
coody| | 2016-9-8 22:11 | 只看该作者
都转成秒,很好判断。

使用特权

评论回复
19
零下10度的冰| | 2016-9-8 22:11 | 只看该作者
可以直接判断语句来做啊,条件一卡不就行了嘛。

使用特权

评论回复
20
zhanzr21| | 2016-9-8 22:29 | 只看该作者
电子过客 发表于 2016-9-8 19:36
划分单位是分钟了,
某个时间点指点是的范围是在0-1440
但是

你是不是要跨天
如果跨天的話 也沒問題
每天用分鐘定為[0, 1439]
設定區間只可能有一個跨天, 其餘都是連續的, 你用個變量记一下 哪個是跨天的
給定一個點, 先判斷是否在連續區間 都不在就在非連續區間
你這個問題用C Library的time_t 等函數 結構 處理很簡單
只是你頭腦一下子沒有轉過彎

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

205

帖子

2

粉丝