0

请考虑以下代码

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调度实际上是这种情况吗?

谢谢你。

4

1 回答 1

0

在这种情况下0*是可以互换的。所以它将按小时运行,然后在一小时内每隔 17 分钟运行一次。

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

于 2013-06-11T15:30:13.247 回答