使用Java中的Cron Expression查找上次触发时间

a-s*_*sak 8 java scheduling quartz-scheduler crontrigger

Java中有没有办法从Cron Expression中找到"Last Fired Time".

例如,如果现在= 2010年4月25日晚上10点,cron表达"0 15 10?**"(石英)应该会回复我25-Apr-2010 10:15 am

注意:1)我不关心我们是否使用标准cron表达式(如Unix和Quartz)或不那么受欢迎的表达式,如果他们可以获取正确的"最后发射时间"2)它也不是字面上的"最后一次发射时间"作为触发器可能没有触发,但逻辑上应该有一种方法可以告诉它(最终会)触发的时间.

Joã*_*ves 8

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

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

请记住,在当前状态下,它有一些问题,可能无法正确计算更复杂的 cron 表达式。


Ste*_*n C 3

首先,我不知道现有的库支持此功能。Quartz 可能会,但标准 Java 类库肯定不会。

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