Рассчитать время следующего запуска Cron в C # - PullRequest
10 голосов
/ 14 ноября 2011

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

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

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 ]

15 голосов
/ 14 ноября 2011

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

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

var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);
2 голосов
/ 14 ноября 2011

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

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

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

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

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

1 голос
/ 27 сентября 2018

Cronos - еще один отличный вариант для этой проблемы.

...