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