I ' m с помощью Quartz CronTrigger для анализа строк формата расписания cron, чтобы определить, когда должно выполняться конкретное задание. На самом деле я не использую Quartz для планирования задания.
В CronTrigger есть метод getFireTimeAfter (Date), который дает в следующий раз, когда задание будет запущено после указанной даты. Это хорошо работает, когда указанная дата наступает сейчас или в будущем. Но он не видит м на работу, если дата в прошлом.
Date currTime = new Date();
CronTrigger tr = new CronTrigger();
tr.setCronExpression("0 0 23 3,18 * ? *");
Date nextFireAt = tr.getFireTimeAfter(currTime);
System.out.println("Reference time: " + currTime);
System.out.println("Next fire after reference time: " + nextFireAt);
Это расписание cron, которое запускается в 23:00 3 и 18 числа каждого месяца. Так, например, если я сделал это сегодня (11 августа), я вижу:
Reference time: Thu Aug 11 10:04:25 MDT 2011
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011
Но если я установлю контрольную дату в прошлое, это даст мне такое же время следующего возгорания.
Reference time: Wed Dec 31 17:00:00 MST 1969
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011
Я ожидал, что результат будет следующим:
Reference time: Wed Dec 31 17:00:00 MST 1969
Next fire after reference time: Wed Aug 3 23:00:00 MDT 2011
Этот метод просто не предназначен для такой работы или я делаю что-то не так?
Спасибо!