找回密码
 加入
搜索
查看: 1822|回复: 8

如何算出大于当前时间并符合2010/*/12 13:*:22的最近时间

  [复制链接]
发表于 2010-1-31 01:19:52 | 显示全部楼层 |阅读模式
本帖最后由 llztt 于 2010-1-31 12:13 编辑

问题:设定一个时间规则, 含*号(代表有效范围内的任意数),如何算出大于当前时间并符合这个时间规则的最近时间呢?

如2010/*/12 13:*:22(当前时间假定为2010/05/04 01:24:03),那么最近时间应该为2010/05/12 13:00:22

但如何快捷的算出呢?



正在做一个计时任务器,一个功能是规定时间时启动某个任务,这个规定时间支持*号, 在循环检测时,我要算出符合这个规定时间的最近时间(当然得大于当前时间为有效),然后进行对比。。。
看来很少人有兴趣,已用笨点办法解决了,结贴之
发表于 2010-1-31 01:47:18 | 显示全部楼层
本帖最后由 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[2]
If $b[4] = $a[4] Then $c2 = $b[5]
If $b[4] <> $a[4] Then $c2 = '00'
msgbox(0, 0, '2010/' & $c1 & '/12 13:' & $c2 & ':22')
 楼主| 发表于 2010-1-31 01:53:40 | 显示全部楼层
哈,这么晚还在啊
恩,那个,我是想得到一个通用的算法,2010/*/12 13:*:22只是一个例子而已。。
就是说:已知当前时间和某个时间规则(就是个含*号的时间),求符合这个时间规则并大于当前时间的最近时间
发表于 2010-1-31 01:57:53 | 显示全部楼层
回复 3# llztt


    呵呵 2#符合“当前时间和某个时间规则”啊~ 还是说“*”的位置不一定?
 楼主| 发表于 2010-1-31 02:05:10 | 显示全部楼层
恩,*位置不一定,可能在年 月 日 时 分 秒任何一个,而且可能会有几个
譬如我想要2010年2月每日5点每分10秒时启动一个任务。。2010/02/*  5:*:10
发表于 2010-2-1 11:23:06 | 显示全部楼层
本帖最后由 netegg 于 2010-2-1 11:25 编辑

是按12小时,还是24小时
还有不确定的数字,是整个算,还是单个算,比如10月,是按10整体可变,还是每位都可变
另外,比如6:9,是按06:09算吗
 楼主| 发表于 2010-2-1 12:48:48 | 显示全部楼层
回复 6# netegg

就按24小时的算,不足一位的前面补0,只要是*号,就代表有效范围内的任何数,譬如月份为*号,代表01—12任意,当然如果日子为*号麻烦些,得考虑日期有效性,譬如2月不会有29号吧。。

我也考虑过不用这么麻烦,用正则可能更快些,但因为循环检测时,如果任务过多,不敢保证每一秒内循环检测一次,所以放弃了正则(写起来也很复杂)。。

所以我目前的考虑是,算出下一个符合规则的日期,等过期了,再算下一个,如此循环,实现支持*号的定时器。。

呵呵,netegg兄有兴趣的话,或有更好办法实现这个支持*号定时器,欢迎提提建议哈
发表于 2010-2-1 13:27:16 | 显示全部楼层
哇 哇。 看不懂。 ~~
发表于 2010-2-1 14:45:11 | 显示全部楼层
本帖最后由 netegg 于 2010-2-1 14:58 编辑

补0好解决,不过不知道你那个定时的结构是什么,没法想
看看这个_Date_Time_FileTimeToStr($tFile, 1)示例,是补0的
如果要是定时器的话,看看_timetotick和_ticktotime两个函数
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-1-12 08:46 , Processed in 0.070776 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表