Вычислить 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 с открытым исходным кодом кварцевые (еще лучше), который делает среди этих вычислений много других очень полезных вещей в этом контексте.