请教时间算法 ( 积分: 100 )

  • 主题发起人 主题发起人 Reecking
  • 开始时间 开始时间
R

Reecking

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下类型记录类型数据,需要找出需要取接近每一个整点的数值
比如 接近1点的是1:04:09,接近2点的是2:03:07的数据,这个算法如何实现?
时间间隔不固定,
0:02:08 数据1 / 数据2
0:35:09 数据1 / 数据2
1:04:09 数据1 / 数据2
1:32:08 数据1 / 数据2
2:03:07 数据1 / 数据2
2:36:07 数据1 / 数据2
3:01:08 数据1 / 数据2
3:32:07 数据1 / 数据2
4:02:06 数据1 / 数据2
4:32:06 数据1 / 数据2
5:02:07 数据1 / 数据2
5:32:07 数据1 / 数据2
6:02:07 数据1 / 数据2
6:32:05 数据1 / 数据2
7:02:07 数据1 / 数据2
7:32:04 数据1 / 数据2
8:02:05 数据1 / 数据2
8:32:04 数据1 / 数据2
9:02:06 数据1 / 数据2
9:32:04 数据1 / 数据2
10:02:04 数据1 / 数据2
10:32:04 数据1 / 数据2
11:02:03 数据1 / 数据2
11:32:03 数据1 / 数据2
12:02:03 数据1 / 数据2
12:32:03 数据1 / 数据2
13:02:03 数据1 / 数据2
13:32:03 数据1 / 数据2
14:02:03 数据1 / 数据2
14:32:03 数据1 / 数据2
15:02:03 数据1 / 数据2
15:32:02 数据1 / 数据2
15:55:51 数据1 / 数据2
16:25:52 数据1 / 数据2
16:55:44 数据1 / 数据2
17:55:43 数据1 / 数据2
18:25:44 数据1 / 数据2
 
对分秒一个个判断不就可以了。
 
直接用SQL可能难以实现,可以写个循环,分别取时间部分的分秒,及与下个小时相差的分秒,就可以得到最接近整点的数据了,至于记住最小值,可用一个整型记当前最小分秒,另用一个变量记住当前记录ID:
比如 0:02:08 -> 分别取到 02:08/57:52(=60:00-02:08) -> 02*100+08/57*100+52, 取小值 208;
==> 当前最小值: 208
0:35:09 -> 分别取到 35:09/24:51(=60:00-35:09) -> 35*100+09/24*100+51, 取小值 2451 > 281;
==> 当前最小值: 208
...
3:01:08 -> 分别取到 01:08/58:52(=60:00-01:08) -> 01*100+08/58*100+52, 取小值 108 < 281;
==> 当前最小值: 108
...
当然,这个算法还可优化一下,比如取小值,判断当前分钟如果大于等于30,则取与下个小时之间相差的分秒即可.
 
to dreamisx 谢谢回复, 如果需要取接近每一个整点的数值
比如 接近1点的是1:04:09,接近2点的是2:03:07的数据,这个算法如何实现?
 
把小时、分钟、秒分别取出来 比较小时相等的值 分钟小于30的接近 小时相等的值 如果分钟大于30的 取小时+1
 
#- - 这个有难度吗?我KAO
 
---------------------------
Project1
---------------------------
0:02:08 数据1 / 数据2
1:04:09 数据1 / 数据2
2:03:07 数据1 / 数据2
3:01:08 数据1 / 数据2
4:02:06 数据1 / 数据2
5:02:07 数据1 / 数据2
6:02:07 数据1 / 数据2
7:02:07 数据1 / 数据2
8:02:05 数据1 / 数据2
9:02:06 数据1 / 数据2
10:02:04 数据1 / 数据2
11:02:03 数据1 / 数据2
12:02:03 数据1 / 数据2
13:02:03 数据1 / 数据2
14:02:03 数据1 / 数据2
15:02:03 数据1 / 数据2
16:25:52 数据1 / 数据2
17:55:43 数据1 / 数据2
18:25:44 数据1 / 数据2
---------------------------
OK
---------------------------

取到这样的数据,是么?
 
to 我爱大咪咪,
就是这样的数据,请教如何实现?
 
数据库的话,时间和指定的时间相减取绝对值再排序就取到了
 
简单的方法,如:
14:32:03 数据1 / 数据2
15:02:03 数据1 / 数据2
15:32:02 数据1 / 数据2
15:55:51 数据1 / 数据2
首先确定 14:32:03 的 Hours 是否和下一条同,不同,则取 15:02:03 ;下面的也不用去遍历了;肯定是首先出现的在这个段内是最小的....然则,取到的则是: 15:02:03 数据1 / 数据2
 
后退
顶部