求助,cron表达式5分钟一次问题

新手请教,关于把cron表达式解析成时间的问题
[问题点数:20分]
新手请教,关于把cron表达式解析成时间的问题
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|没有更多推荐了,
不良信息举报
举报内容:
解析Cron表达式
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!  Cron表达式是一个字符串,字符串以<span style="color: #ff个空格隔开,分为<span style="color: #ff个域,每一个域代表一个含义,Cron有如下两种语法格式:
  (1)&Seconds Minutes Hours DayofMonth Month DayofWeek Year
  (2)Seconds Minutes Hours DayofMonth Month DayofWeek
  一、结构
  corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
  二、各字段的含义
允许的特殊字符
秒(Seconds)
0~59的整数
, - * / & &四个字符
分(Minutes)
0~59的整数
, - * / & &四个字符
小时(Hours)
0~23的整数
, - * / & &四个字符
日期(DayofMonth)
1~31的整数(但是你需要考虑你月的天数)
,- * ? / L W C & & 八个字符
月份(Month)
1~12的整数或者 JAN-DEC
, - * / & &四个字符
星期(DayofWeek)
1~7的整数或者 SUN-SAT (1=SUN)
, - * ? / L C # & & 八个字符
年(可选,留空)(Year)
, - * / & &四个字符
  注意事项:
  每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:
  (1)*:表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件。
  (2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
  (3)-:表示范围。例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次&
  (4)/:表示起始时间开始触发,然后每隔固定时间触发一次。例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.&
  (5),:表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。&
  (6)L:表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。&
  (7)W:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。
  (8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。&
  (9)#:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。
  三、常用表达式例子
  (1)0 0 2 1 * ? * &&表示在每月的1日的凌晨2点调整任务
  (2)0 15 10 ? * MON-FRI & 表示周一到周五每天上午10:15执行作业
  (3)0 15 10 ? 6L
& 表示年的每个月的最后一个星期五上午10:15执行作
  (4)0 0 10,14,16 * * ? &&每天上午10点,下午2点,4点&
  (5)0 0/30 9-17 * * ? & 朝九晚五工作时间内每半小时&
  (6)0 0 12 ? * WED & &表示每个星期三中午12点&
  (7)0 0 12 * * ? &&每天中午12点触发&
  (8)0 15 10 ? * * & &每天上午10:15触发&
  (9)0 15 10 * * ? & & 每天上午10:15触发&
  (10)0 15 10 * * ? * & &每天上午10:15触发&
  (11)0 15 10 * * ? 2005 & &2005年的每天上午10:15触发&
  (12)0 * 14 * * ? & & 在每天下午2点到下午2:59期间的每1分钟触发&
  (13)0 0/5 14 * * ? & &在每天下午2点到下午2:55期间的每5分钟触发&
  (14)0 0/5 14,18 * * ? & & 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发&
  (15)0 0-5 14 * * ? & &在每天下午2点到下午2:05期间的每1分钟触发&
  (16)0 10,44 14 ? 3 WED & &每年三月的星期三的下午2:10和2:44触发&
  (17)0 15 10 ? * MON-FRI & &周一至周五的上午10:15触发&
  (18)0 15 10 15 * ? & &每月15日上午10:15触发&
  (19)0 15 10 L * ? & &每月最后一日的上午10:15触发&
  (20)0 15 10 ? * 6L & &每月的最后一个星期五上午10:15触发&
  (21)0 15 10 ? * 6L
& 2002年至2005年的每月的最后一个星期五上午10:15触发&
  (22)0 15 10 ? * 6#3 & 每月的第三个星期五上午10:15触发
  (1)有些子表达式能包含一些范围或列表
  例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”
“*”字符代表所有可能的值
  因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天
  “/”字符用来指定数值的增量&  例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟&在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
  “?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值&  当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
  “L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写&  但是它在两个子表达式里的含义是不同的。&  在天(月)子表达式中,“L”表示一个月的最后一天&  在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT
  如果在“L”前有具体的内容,它就具有其他的含义了
  例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五&  注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
阅读(...) 评论()判断cron表达式输入是否有效的正则表达式_百度知道
判断cron表达式输入是否有效的正则表达式
我有更好的答案
^(?!.*[^&#92;d+&#92;-*/&#92;(&#92;)])
#规则0,字符串必须由数字,符号和括号组成(?!.*&#92;)&#92;d)
#规则A,不允许右括号后接数字(?!.*[+&#92;-*/]([+&#92;-*/]|&#92;)))
#规则B,不允许符号后面接符号或右括号(?!.*&#92;([+*/])
#规则C,不允许左括号后接运算符(- 可以表示负号)(?!.*(&#92;d|&#92;))&#92;()
#规则D,不允许左括号前有数字或右括号(?=&#92;d|&#92;-|&#92;()
#规则E,字符串开头必须是,数字,负号,左括号中的一个(?=.*(&#92;d|&#92;))$)
#规则F:结尾必须是数字或者右括号[^&#92;(&#92;)]*
#开始匹配,捕获括号,使用平衡组来判断括号数量是否相等,需要.NET的支持(((?&#39;open&#39;&#92;()[^&#92;(&#92;)]*)+((?&#39;-open&#39;&#92;))[^&#92;(&#92;)]*)+)*(?(open)(?!))
#规则G:左右括号数量必须相等$最终的正则表达式为:^(?!.*[^&#92;d+&#92;-*/&#92;(&#92;)])(?!.*&#92;)&#92;d)(?!.*[+&#92;-*/]([+&#92;-*/]|&#92;)))(?!.*&#92;([+*/])(?!.*(&#92;d|&#92;))&#92;()(?=&#92;d|&#92;-|&#92;()(?=.*(&#92;d|&#92;))$)[^&#92;(&#92;)]*(((?&#39;open&#39;&#92;()[^&#92;(&#92;)]*)+((?&#39;-open&#39;&#92;))[^&#92;(&#92;)]*)+)*(?(open)(?!))$没考虑空格的情况,因为考虑空格需要加很多很多个&#92;s*,大大降低可读性由于使用了平衡组,此正则表达式需要在.NET环境下运行
采纳率:96%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。问一个Quartz的cron 表达式问题 - ITeye问答
每天10点到第二天10点,间隔7个小时执行
问题补充:LeeYee 写道还没见到过quartz跨天的cron表达式
在网上了看了下,然后自己测试了多个也不满足,难道真的不支持跨天吗?
问题补充:LeeYee 写道应该是不满足的跨天,毕竟只是个表达式,怎么知道是否到第二天了?
要不试下小时是10-34!!我这没现成的代码。
或者换个思路。比如拆分成偶数天从10-23每7个小时执行,奇数天从0-10每7个小时执行。或者看下你的业务逻辑是否还可以转化成其他方式。自己想的,抛砖引玉了!楼主别见怪。
Hour values must be between 0 and 23
拆分的方案可以考虑下,既然没有现成的表达式只能拆成2个来处理
问题补充:jackyIT 写道你这个问题提的不太明白
1.每天10点到第二天10& 这个10点是早上10点还是晚上10点?
2.间隔7个小时执行,是在你说的“10点至第二天10点之间”间隔还是执行完后间隔呢?
3.如果是执行完后间隔7个小时,那么又会跟“每天10天到第二天10点”冲突?
不知道你是否把这些问题想明白了.. 如果想明白了我可以给你一个链接,相信你一定能写出来你想要的表达式
http://biaoming.iteye.com/blog/39532
谢谢您的建议,我以后在提问题时会注意的
采纳的答案
引用Hour values must be between 0 and 23
拆分的方案可以考虑下,既然没有现成的表达式只能拆成2个来处理
呵呵 ,看来想当然了。不过这也验证了没法设置第一天是 10-23 第二天是0-10了。
楼主在看看又没有其他方式了。
应该是不满足的跨天,毕竟只是个表达式,怎么知道是否到第二天了?
要不试下小时是10-34!!我这没现成的代码。
或者换个思路。比如拆分成偶数天从10-23每7个小时执行,奇数天从0-10每7个小时执行。或者看下你的业务逻辑是否还可以转化成其他方式。自己想的,抛砖引玉了!楼主别见怪。
你这个问题提的不太明白
1.每天10点到第二天10& 这个10点是早上10点还是晚上10点?
2.间隔7个小时执行,是在你说的“10点至第二天10点之间”间隔还是执行完后间隔呢?
3.如果是执行完后间隔7个小时,那么又会跟“每天10天到第二天10点”冲突?
不知道你是否把这些问题想明白了.. 如果想明白了我可以给你一个链接,相信你一定能写出来你想要的表达式
http://biaoming.iteye.com/blog/39532
你这个问题提的不太明白
1.每天10点到第二天10& 这个10点是早上10点还是晚上10点?
2.间隔7个小时执行,是在你说的“10点至第二天10点之间”间隔还是执行完后间隔呢?
3.如果是执行完后间隔7个小时,那么又会跟“每天10天到第二天10点”冲突?
不知道你是否把这些问题想明白了.. 如果想明白了我可以给你一个链接,相信你一定能写出来你想要的表达式
http://biaoming.iteye.com/blog/39532
还没见到过quartz跨天的cron表达式
已解决问题
未解决问题}

我要回帖

更多关于 cron表达式每隔1小时 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信