在 Java 中使用 Cron 表达式查找上次触发时间

在Java中,有没有办法从Cron表达式中找到“上次触发时间”?

例如,如果 ,并且 cron 表达式是 (quartz),则应返回 。now = 25-Apr-2010 10PM0 15 10 ? * *25-Apr-2010 10:15AM

注意:

  1. 我不在乎我们是否使用标准的cron表达式(如Unix和Quartz)或不太流行的表达式,如果他们能给我正确的“上次触发时间”
  2. 此外,它不是字面上的“最后一次射击时间”,因为触发器可能没有触发,但从逻辑上讲,应该有一种方法可以判断它(本来会)何时最后一次发射。

答案 1

cron-utils是一个开源Java库,用于解析,验证,迁移支持您需要的操作的克隆。要从给定时间之前的cron获取上一个日期,只需:

//Get date for last execution
DateTime now = DateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * * *"));
DateTime lastExecution = executionTime.lastExecution(now));

请记住,在当前状态下,它有点错误,对于更复杂的cron表达式可能无法正确计算。


答案 2

首先,我不知道是否有现有的库支持这一点。Quartz可能会,但标准的Java类库肯定不会。

其次,严格地说,你最初要求的东西是不可能的。库可以告诉您的最好的情况是,cron 表达式将已经应该触发。唯一可以(理论上)告诉您最后一次实际触发cron表达式的是调度程序实例本身。


推荐