2020-01-25 15:19发布
zyw19987 发表于 2014-1-9 07:24 我在一个圆上取了两个点,问你知道我要圆上哪段弧?
沧海清风 发表于 2014-1-9 14:05 先把你的时间转换成分或秒 按照你的2个例子: Start_t = 00:00 Now_t = 23:26 End_t = 23:59
最多设置5个标签!
当然可以知道 从A点到B点 如果A大于B是一种情况 如果A小于B又是一种情况
按照你的2个例子:
Start_t = 00:00 Now_t = 23:26 End_t = 23:59
Start_t = 12:30 Now_t = 8:30 End_t = 08:00
转换成下面的:
Start_m = 0 Now_m = 1406 End_m = 1439
Start_m = 750 Now_m = 510 End_m = 480
return Now_m >= Start_m && Now_m <= End_m
构造tm,调用mktime得到秒计数值;另外从秒计数值到日期是使用localtime
这两个函数可以到linux源码里扣……VC的CRT函数里也有,安装时勾选上就能得到
果然是大神,我刚开始考虑这么计算,换算成秒,但是一天内的秒数超出了65535,得用32位的,想来想去还是算了,哈哈。。。结果弄了个这么费劲的算法。。。得不偿失啊。。。。谢谢指点!!!
沧海清风:
先把你的时间转换成分或秒
按照你的2个例子:
Start_t = 00:00 Now_t = 23:26 End_t = 23:59
Start_t = 12:30 Now_t = 8:30 End_t = 08:00
转换成下面的:
Start_m = 0 Now_m = 1406 End_m = 1439
Start_m = 750 Now_m = 510 End_m = 480
return Now_m >= Start_m && Now_m <= End_m
不好意思,你的算法部分是能够算出来的,就是在同一天的情况下或者不在同一天,但当前时间和结束时间在同一天的时候,结果是正确的,但是有一种跨天的情况,就会计算错误了
比如: Start_t = 12:30 Now_t = 13:30 End_t = 08:00(正确的话应该是返回1)
Start_m = 750 Now_m = 810 End_m = 480
那么
return( 810>=750 && 810<=480)等效return(1 && 0)因此返回0
呵呵,所以,我给改成这样了,理论上应该没问题了
UINT16 N,S,E;
N=Now_h*60+Now_m;//当前时间 N=12:20=740
S=Start_h*60+Start_m;//起始时间 S=12:30=750
E=End_h*60+End_m;//结束时间 E=8:00=480
if(E>=S)//如果在同一天
return(N>=S && N<=E);//同一天的情况
else
return(!( N>=E && N<=S));//跨天的情况
非常感谢您的思路,很牛X的算法!!!
一周热门 更多>