有没有java类可以从cron表达式获取日期

问题描述 投票:0回答:6

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

java date cron cronexpression
6个回答
24
投票

您还可以利用 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());

21
投票

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


9
投票

这里有一个类似于 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 许可证。


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);

3
投票

看起来您可以使用其中任何一个:


0
投票

CronSequenceGenerator 已弃用,您可以使用它:

public static Date findNextTimeFromCornExpression (String cornExpression) {
    Date now = new Date();
    CronSchedule cronSchedule = CronSchedule.of(cornExpression);
    return cronSchedule.getExpression().getTimeAfter(now);
}
© www.soinside.com 2019 - 2024. All rights reserved.