Unicorn
Unicorn

Reputation: 2422

Is there any java class to get Date from cron expression

I need to find out the first occurrence of Date and time represented by given cron expression. Is there any java class, utility code which can help in getting data object from given cron expression ?

Upvotes: 16

Views: 30919

Answers (6)

hani
hani

Reputation: 51

CronSequenceGenerator is deprecated, You can use this :

public static Date findNextTimeFromCornExpression (String cornExpression) {
    Date now = new Date();
    CronSchedule cronSchedule = CronSchedule.of(cornExpression);
    return cronSchedule.getExpression().getTimeAfter(now);
}

it work for java 17

Upvotes: 0

javamonkey79
javamonkey79

Reputation: 17765

It looks like you could use either of these:

Upvotes: 3

lorraine batol
lorraine batol

Reputation: 6281

You can also leverage on spring's http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html for this

CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
Date nextRunDate= generator.next(new Date());

Upvotes: 24

João Neves
João Neves

Reputation: 1132

Here's an alternative similar to Quartz's CronExpression but without having to add a fully fledged scheduler to your project: cron-utils

You can get the date you need with the following:

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

According to the official description, cron-utils is:

A Java library to parse, validate, migrate crons as well as get human readable descriptions for them. The project follows the Semantic Versioning Convention and uses Apache 2.0 license.

Upvotes: 9

nMoncho
nMoncho

Reputation: 370

If you're using Spring you could use:

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

Upvotes: 8

saugata
saugata

Reputation: 2863

You can check org.quartz.CronExpression It has a method named getNextValidTimeAfter which you can use.

Upvotes: 21

Related Questions