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 に答える