我需要找出给定 cron 表达式表示的日期和时间的第一次出现。 是否有任何 java 类、实用程序代码可以帮助从给定的 cron 表达式获取数据对象?
您还可以利用 spring 的 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html 为此
CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
Date nextRunDate= generator.next(new Date());
您可以检查org.quartz.CronExpression 它有一个名为 getNextValidTimeAfter 的方法,您可以使用它。
这里有一个类似于 Quartz 的 CronExpression 的替代方案,但无需向您的项目添加成熟的调度程序: cron-utils
您可以通过以下方式获取您需要的日期:
//Get date for next execution
DateTime now = DateTime.now();
CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
CronParser parser = new CronParser(cronDefinition);
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * * *"));
DateTime nextExecution = executionTime.nextExecution(now));
根据官方描述,cron-utils是:
一个用于解析、验证、迁移 cron 并获取人类可读描述的 Java 库。该项目遵循语义版本控制约定并使用 Apache 2.0 许可证。
如果您使用 Spring 您可以使用:
CronTrigger trigger = new CronTrigger(cron);
TriggerContext context = new TriggerContext() {
public Date lastScheduledExecutionTime() {
return null;
}
public Date lastActualExecutionTime() {
return null;
}
public Date lastCompletionTime() {
return null;
}
};
return trigger.nextExecutionTime(context);
看起来您可以使用其中任何一个:
CronSequenceGenerator 已弃用,您可以使用它:
public static Date findNextTimeFromCornExpression (String cornExpression) {
Date now = new Date();
CronSchedule cronSchedule = CronSchedule.of(cornExpression);
return cronSchedule.getExpression().getTimeAfter(now);
}