14

我需要找出给定 cron 表达式表示的日期和时间的第一次出现。是否有任何 java 类、实用程序代码可以帮助从给定的 cron 表达式中获取数据对象?

4

6 回答 6

21

您还可以利用 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());
于 2016-08-08T05:57:25.360 回答
20

你可以查看org.quartz.CronExpression 它有一个名为 getNextValidTimeAfter 的方法,你可以使用它。

于 2010-12-06T07:07:24.427 回答
8

如果您使用的是 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);
于 2014-04-04T15:13:37.703 回答
8

这是一个类似于 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是:

一个 Java 库,用于解析、验证、迁移 crons 以及为它们获取人类可读的描述。该项目遵循语义版本控制约定并使用 Apache 2.0 许可证。

于 2015-09-10T16:47:52.237 回答
3

看起来您可以使用以下任何一种:

于 2010-12-06T07:01:48.740 回答
2

使用超轻量级https://github.com/frode-carlsen/cron lib。下面是代码示例:

CronExpression expression = new CronExpression(params.getCronExpression());
ZonedDateTime currentDate = ZonedDateTime.now();
ZonedDateTime nextStartDate = expression.nextTimeAfter(currentDate);
于 2021-11-24T09:05:13.597 回答