如何从初始LocalDateTime和cron表达式获取下一个LocalDateTime?

时间:2017-05-22 09:46:59

标签: date cron java-8

我有一个初始日期和一个cron表达式。我怎么能找到满足这个cron表达式的下一个日期?。

    String cronExpresion = "* * * * * *"
    LocalDateTime initial = LocalDateTime.now()
    LocalDateTime next = ?

我尝试了CronSequenceGenerator及其 next()方法,但它使用了java.util.Date,我宁愿不将LocalDateTime转换为Date,反之亦然。另外,我从几次运行中获得了不同的结果(两个日期之间的时间)和一个像'每10个secondes'一样的cron ......

有什么想法吗? lib?

3 个答案:

答案 0 :(得分:3)

Omnicron(https://github.com/intelie/omnicron)似乎至少满足了你的一些要求:

Cron cron = new Cron("*/5 * * * *");
ZonedDateTime date = ZonedDateTime.now();

System.out.println("Next execution: " + cron.next(date));
System.out.println("Prev execution: " + cron.prev(date));

(Cron :: next和Cron :: prev接受任何Temporal值,而不仅仅是ZonedDateTime。)

除此之外,Omnicron作为奖励与Spring的CronSequenceGenerator(https://github.com/intelie/omnicron/blob/master/src/test/java/net/intelie/omnicron/SpringCompatibilityTest.java)兼容

答案 1 :(得分:0)

另一种解决方案是从春季开始使用CronSequenceGenerator

String cronExpresion = "* * * * * *";
Date next = new CronSequenceGenerator().next(new Date());
return LocalDateTime.ofInstant(next.toInstant(), ZoneId.systemDefault());

答案 2 :(得分:0)

最后一个5.3.0版本的Spring发布了CronExpression的新版本,该版本未连接到旧的Java时间API