在C#中计算Cron下一次运行时间

时间:2011-11-14 12:11:34

标签: c# algorithm crontab

我有类似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 个答案:

答案 0 :(得分:15)

我已成功使用NCrontab来实现此目的。

使用

之类的东西
var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);

答案 1 :(得分:2)

您可以使用DateTimeTimeSpan自行编码 - 例如:

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

检查当前是否为15:35(因此需要执行一些执行),类似的检查可以在星期几,日期等实施。

或使用名为NodaTime的非常好的开源.NET库(绝对是一种更好的方式)。

另一种选择是使用不同的体系结构 - 对于这样的调度程序类型的应用程序/服务,有一个名为Quartz的开源.NET库(甚至更好),它在这些计算中做了许多其他非常有用的事情。上下文。

答案 2 :(得分:0)

Cronos是解决此问题的另一个绝佳选择。