如何算出大于当前时间并符合2010/*/12 13:*:22的最近时间
本帖最后由 llztt 于 2010-1-31 12:13 编辑问题:设定一个时间规则, 含*号(代表有效范围内的任意数),如何算出大于当前时间并符合这个时间规则的最近时间呢?
如2010/*/12 13:*:22(当前时间假定为2010/05/04 01:24:03),那么最近时间应该为2010/05/12 13:00:22
但如何快捷的算出呢?
正在做一个计时任务器,一个功能是规定时间时启动某个任务,这个规定时间支持*号, 在循环检测时,我要算出符合这个规定时间的最近时间(当然得大于当前时间为有效),然后进行对比。。。
看来很少人有兴趣,已用笨点办法解决了,结贴之 本帖最后由 afan 于 2010-1-31 01:49 编辑
不知道是这个意思不$a = '2010/*/12 13:*:22'
$b = '2010/05/04 01:24:03'
$a = StringSplit($a, '/ :')
$b = StringSplit($b, '/ :')
$c1 = $b
If $b = $a Then $c2 = $b
If $b <> $a Then $c2 = '00'
msgbox(0, 0, '2010/' & $c1 & '/12 13:' & $c2 & ':22') 哈,这么晚还在啊
恩,那个,我是想得到一个通用的算法,2010/*/12 13:*:22只是一个例子而已。。
就是说:已知当前时间和某个时间规则(就是个含*号的时间),求符合这个时间规则并大于当前时间的最近时间 回复 3# llztt
呵呵 2#符合“当前时间和某个时间规则”啊~ 还是说“*”的位置不一定? 恩,*位置不一定,可能在年 月 日 时 分 秒任何一个,而且可能会有几个
譬如我想要2010年2月每日5点每分10秒时启动一个任务。。2010/02/*5:*:10 本帖最后由 netegg 于 2010-2-1 11:25 编辑
是按12小时,还是24小时
还有不确定的数字,是整个算,还是单个算,比如10月,是按10整体可变,还是每位都可变
另外,比如6:9,是按06:09算吗 回复 6# netegg
就按24小时的算,不足一位的前面补0,只要是*号,就代表有效范围内的任何数,譬如月份为*号,代表01—12任意,当然如果日子为*号麻烦些,得考虑日期有效性,譬如2月不会有29号吧。。
我也考虑过不用这么麻烦,用正则可能更快些,但因为循环检测时,如果任务过多,不敢保证每一秒内循环检测一次,所以放弃了正则(写起来也很复杂)。。
所以我目前的考虑是,算出下一个符合规则的日期,等过期了,再算下一个,如此循环,实现支持*号的定时器。。
呵呵,netegg兄有兴趣的话,或有更好办法实现这个支持*号定时器,欢迎提提建议哈 哇 哇。 看不懂。 ~~ 本帖最后由 netegg 于 2010-2-1 14:58 编辑
补0好解决,不过不知道你那个定时的结构是什么,没法想
看看这个_Date_Time_FileTimeToStr($tFile, 1)示例,是补0的
如果要是定时器的话,看看_timetotick和_ticktotime两个函数
页:
[1]