Я использую 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
Метод просто не предназначен для такой работы или я что-то не так делаю?
Спасибо!