Вычислить Cron следующее время выполнения в C#

У меня есть crontab-подобный планировщик. Определение времени "MM HH WD MD M":

Мм-минут
HH - часы
WD-дни недели
MD-дни месяца
м - месяцев

WD, MD и M допускают несколько записей, и каждый из параметров может быть нулевым, например:

^ ^  0, 1  ^ ^      means exucution every minute, every hour, at sunday and mondey, every day<br>

35 15 ^ ^ ^    execution every day at 15.35<br>

проблема в том, как вычислить следующее время выполнения, если вы знаете последнюю дату выполнения. Я знаю, как это сделать с помощью цикла (Просто добавьте 1 минуту, пока он не подойдет к условию), но там должен быть лучший способ.

3 ответов


Я успешно использовал NCrontab именно для этой цели.

использовать что-то вроде

var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);

вы можете либо код, который вы сами используете DateTime и TimeSpan, например:

DateTime.Now == DateTime.Now.Date.AddHours (15).AddMinutes (35)

проверяет, является ли это 15:35 в настоящее время (и, следовательно, некоторое выполнение должно иметь место), аналогичные проверки могут быть реализованы для дня недели, дня месяца и т. д.

или использовать действительно хорошую библиотеку .NET с открытым исходным кодом под названием NodaTime (определенно лучше).

другой вариант-использовать другой архитектура-для таких приложений/служб типа планировщика существует библиотека .NET с открытым исходным кодом кварцевые (еще лучше), который делает среди этих вычислений много других очень полезных вещей в этом контексте.


Кронос еще один прекрасный вариант для этой проблемы.