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

[复制链接]
9574|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;   }


}

有时候第四个时间段结束的时间比开始的时间数值要小
zhanzr21 发表于 2016-9-8 17:33 | 显示全部楼层
0點0分0秒為0
每小時每分鐘每秒逐次加
其實C Library就有這樣的轉換函數
 楼主| 电子过客 发表于 2016-9-8 17:42 | 显示全部楼层
zhanzr21 发表于 2016-9-8 17:33
0點0分0秒為0
每小時每分鐘每秒逐次加
其實C Library就有這樣的轉換函數

没有明白您的意思,能举个例子吗
七颗咖啡豆 发表于 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;
}
 楼主| 电子过客 发表于 2016-9-8 18:12 | 显示全部楼层
七颗咖啡豆 发表于 2016-9-8 17:59
typedef{
u8   hour;
u8   min;

如果目前时间是2:01
时间段是1:02到3:03还是会false
泰山特曲123 发表于 2016-9-8 18:31 来自手机 | 显示全部楼层
就你那个例子,判断小时就行了
electronlao 发表于 2016-9-8 18:34 来自手机 | 显示全部楼层
把所有时间转换成秒,比较大小。
 楼主| 电子过客 发表于 2016-9-8 18:44 | 显示全部楼层
electronlao 发表于 2016-9-8 18:34
把所有时间转换成秒,比较大小。

最小单位是分钟就够了
john_lee 发表于 2016-9-8 19:24 | 显示全部楼层
如果划分的粒度是整小时,那么查表就可以了;如果是分钟,表太大,还是老老实实比较吧。
mmuuss586 发表于 2016-9-8 19:32 | 显示全部楼层
学习下;
 楼主| 电子过客 发表于 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 都能成立
做比较条件判断太多, 您能举个例子指点下吗
john_lee 发表于 2016-9-8 20:37 | 显示全部楼层
简单点,把跨天的时间段安排在最后(实际上不用安排存储),只比较前3个,如果都不是,那就是第4个。
llh1979 发表于 2016-9-8 21:06 | 显示全部楼层
用秒计时,显示时转换一下,只要比较一下大小就好了
 楼主| 电子过客 发表于 2016-9-8 21:40 | 显示全部楼层
john_lee 发表于 2016-9-8 20:37
简单点,把跨天的时间段安排在最后(实际上不用安排存储),只比较前3个,如果都不是,那就是第4个。 ...

如果客户是在第3个时间段设置22:00--8:00点呢
coody 发表于 2016-9-8 22:11 | 显示全部楼层
都转成秒,很好判断。
零下10度的冰 发表于 2016-9-8 22:11 | 显示全部楼层
可以直接判断语句来做啊,条件一卡不就行了嘛。
zhanzr21 发表于 2016-9-8 22:29 | 显示全部楼层
电子过客 发表于 2016-9-8 19:36
划分单位是分钟了,
某个时间点指点是的范围是在0-1440
但是

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

本版积分规则

55

主题

210

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部