我有一个初始日期和一个cron表达式。我怎么能找到满足这个cron表达式的下一个日期?。
String cronExpresion = "* * * * * *"
LocalDateTime initial = LocalDateTime.now()
LocalDateTime next = ?
我尝试了CronSequenceGenerator及其 next()方法,但它使用了java.util.Date,我宁愿不将LocalDateTime转换为Date,反之亦然。另外,我从几次运行中获得了不同的结果(两个日期之间的时间)和一个像'每10个secondes'一样的cron ......
有什么想法吗? lib?
答案 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