use*_*212 8 cron quartz-scheduler cronexpression spring-scheduled
Mat*_*att 16
请用:
import org.springframework.scheduling.support.CronSequenceGenerator;
final String cronExpression = "0 45 23 * * *";
final CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
final Date nextExecutionDate = generator.next(new Date());
Run Code Online (Sandbox Code Playgroud)
...然后我建议使用Joda DateTime进行日期比较.
也许你可以检查cron-utils 它有一些实用程序来获取给定特定日期的下一个/上一个执行,例如:现在。与 JodaTime 一起使用,但您可以从那里检索 JavaDate。该库与调度程序无关:您只需提供带有 cron 表达式的字符串。兼容JDK6。
您可能需要查看Quartz API中的org.quartz.CronExpression类。
请注意,您不能简单地将cron表达式与日期进行比较,因为cron表达式(通常)表示一系列不同的日期。无论如何,您可能会发现以下有用的方法:
public boolean isSatisfiedBy(Date date)
public Date getNextValidTimeAfter(Date date)
Run Code Online (Sandbox Code Playgroud)
至于比较两个cron表达式,您想比较什么?IMO比较有意义的唯一事情是下一个“触发”日期,即从getNextValidTimeAfter([某些参考日期])调用获得的日期。
我写了一个处理cron表达式的小类,可以在这里找到:https: //github.com/frode-carlsen/cron
基于Joda-time,但应该相当容易移植到Java8时间api.这也可以通过调整Joda-time中的DateTime偏移量来嵌入单元测试,模拟等.
它也有相当不错的测试覆盖率(以TDD Kata完成).
立即更新支持java 8时间api以及github用户 https://github.com/zemiak的贡献.在这两种情况下,表达式解析器都是一个很小的类,可以很容易地复制到您自己的项目中.