0

私はおそらくただのばかです - 長い一日でした! Quartz への最初の進出で何かを誤解してしまいました...

このコードを考えると:

DateTime dt = new DateTime();
dt = dt.withDayOfMonth(20);

Calendar cal = new CronCalendar("0 0/10 * * * ?" );
long start = dt.getMillis();
System.out.println("Starting at " + start);
long end = start + 10;
long current = start;
int i = 0;
while (current < end) {
  if (i > 0) {
    System.out.println(i + ":" + current);
  }
  long next = cal.getNextIncludedTime(current);
  current = next;
  i++;
}

時間枠は 10 ミリ秒で、カレンダーに含まれる時間は 10 分離れているため、出力に含まれる時間は最大で 1 つになると思います。

しかし、私がそれを実行すると:

Starting at 1250796103004
1:1250796103005
2:1250796103006
3:1250796103007
4:1250796103008
5:1250796103009
6:1250796103010
7:1250796103011
8:1250796103012
9:1250796103013

助けてください!

4

1 に答える 1

1

ええ、私だけがばかです。

カレンダーは EXCLUDED 時間を指定します。

CronTrigger を使用して、含めたい時間を指定する必要がありました。コードは次のようになります...

CronTrigger cal = new CronTrigger("Test", "Test", "0 0/10 * * * ?" );
...
end = start + 1000000;
...
while (current < end) {
  if (i > 0) {
  System.out.println(i + ":" + current);
  }
  Date next = cal.getFireTimeAfter(new Date(current));
  current = next.getTime();
  i++;
}

これにより、私が期待していた出力が得られます。

Starting at 1250798091337
1:1250798400000
2:1250799000000
于 2009-08-14T19:58:18.530 に答える