Есть ли класс Java для получения даты из выражения cron - PullRequest
10 голосов
/ 06 декабря 2010

Мне нужно выяснить первое вхождение даты и времени, представленное данным выражением cron. Есть ли какой-нибудь java-класс, служебный код, который может помочь в получении объекта данных из данного выражения cron?

Ответы [ 5 ]

16 голосов
/ 06 декабря 2010

Вы можете проверить org.quartz.CronExpression У него есть метод getNextValidTimeAfter, который вы можете использовать.

13 голосов
/ 08 августа 2016

Для этого

CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
Date nextRunDate= generator.next(new Date());
вы также можете использовать пружины http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html
8 голосов
/ 04 апреля 2014

Если вы используете 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);
7 голосов
/ 10 сентября 2015

Вот альтернатива, аналогичная CronExpression в Quartz, но без добавления полноценного планировщика в ваш проект: хрон-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 для анализа, проверки, миграции кронов, а также для получения удобочитаемых описаний для них. Проект следует соглашению о семантическом управлении версиями и использует лицензию Apache 2.0.

3 голосов
/ 06 декабря 2010

Похоже, вы могли бы использовать любой из этих:

...