Cron4j模式匹配精确小时,但不应该

时间:2013-06-11 11:12:37

标签: cronexpression cron4j

请考虑以下代码

String pattern = "*/17 * * * *";
Date d = new Date();
for (int i = 0; i < 10; i++) {
      System.out.println("Start: " + d + ", " + (d = new Predictor(pattern, d).nextMatchingDate()));
}

这会输出以下示例(我把括号中没有的时间放在括号中):

Start: Tue Jun 11 12:54:48 GMT+02:00 2013, Tue Jun 11 (13:00:00) GMT+02:00 2013
Start: Tue Jun 11 13:00:00 GMT+02:00 2013, Tue Jun 11 13:17:00 GMT+02:00 2013
Start: Tue Jun 11 13:17:00 GMT+02:00 2013, Tue Jun 11 13:34:00 GMT+02:00 2013
Start: Tue Jun 11 13:34:00 GMT+02:00 2013, Tue Jun 11 13:51:00 GMT+02:00 2013
Start: Tue Jun 11 13:51:00 GMT+02:00 2013, Tue Jun 11 (14:00:00) GMT+02:00 2013
Start: Tue Jun 11 14:00:00 GMT+02:00 2013, Tue Jun 11 14:17:00 GMT+02:00 2013
Start: Tue Jun 11 14:17:00 GMT+02:00 2013, Tue Jun 11 14:34:00 GMT+02:00 2013
Start: Tue Jun 11 14:34:00 GMT+02:00 2013, Tue Jun 11 14:51:00 GMT+02:00 2013
Start: Tue Jun 11 14:51:00 GMT+02:00 2013, Tue Jun 11 (15:00:00) GMT+02:00 2013
Start: Tue Jun 11 15:00:00 GMT+02:00 2013, Tue Jun 11 15:17:00 GMT+02:00 2013

虽然模式配置为匹配可被17整除的分钟,但如果这是描述它的正确方法,则预测器会将精确的小时(13:00,14:00,15:00 ......等)视为有效的下一个 - 匹配日期!

我的问题是:

  • 这种行为有效吗?如果是,那么为什么它有效?
  • 如何防止此行为?我的意思是如果时间字段(即分钟,小时,天,工作日)不能被它的最大值(即60,24,30或31)整除,我怎么能阻止预测器将精确小时视为匹配时间7)?
  • unix cron调度实际上是这种情况吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

在此背景下0*可以互换。所以它将在一小时内运行,然后在一小时内以17分钟的间隔运行。

从小时后17分钟开始,然后在该持续时间尝试此模式:17-59/17 * * * *