我有一个初始日期和一个 cron 表达式。我怎样才能找到满足这个 cron 表达式的下一个日期?.
String cronExpresion = "* * * * * *"
LocalDateTime initial = LocalDateTime.now()
LocalDateTime next = ?
我尝试了 CronSequenceGenerator 及其 next() 方法,但它使用 java.util.Date,我不希望将 LocalDateTime 转换为 Date,反之亦然。另外,我从几次使用“每 10 秒”这样的 cron 运行得到了不同的结果(两个日期之间的时间)...
有什么想法吗?库?
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 接受任何时间值,而不仅仅是 ZonedDateTime。)
除此之外,Omnicron 还可以与 Spring 的 CronSequenceGenerator 兼容(https://github.com/intelie/omnicron/blob/master/src/test/java/net/intelie/omnicron/SpringCompatibilityTest.java )
另一个解决方案是使用 spring 的 CronSequenceGenerator。
String cronExpresion = "* * * * * *";
Date next = new CronSequenceGenerator().next(new Date());
return LocalDateTime.ofInstant(next.toInstant(), ZoneId.systemDefault());
Java Spring,您可以使用 Spring 框架中的 CronExpression 类。 您可以这样做:
import org.springframework.scheduling.support.CronExpression;
import java.time.LocalDateTime;
public class CronNextExecutionExample {
public static void main(String[] args) {
String cronExpression = "0 0 12 * * ?"; // Runs daily at 12:00 PM
CronExpression cron = CronExpression.parse(cronExpression);
LocalDateTime now = LocalDateTime.now();
LocalDateTime nextExecution = cron.next(now);
System.out.println("Next execution: " + nextExecution);
}
}