我有类似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分钟直到它符合条件),但必须有更好的方法。
答案 0 :(得分:15)
我已成功使用NCrontab来实现此目的。
使用
之类的东西var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);
答案 1 :(得分:2)
您可以使用DateTime和TimeSpan自行编码 - 例如:
DateTime.Now == DateTime.Now.Date.AddHours (15).AddMinutes (35)
检查当前是否为15:35(因此需要执行一些执行),类似的检查可以在星期几,日期等实施。
或使用名为NodaTime的非常好的开源.NET库(绝对是一种更好的方式)。
另一种选择是使用不同的体系结构 - 对于这样的调度程序类型的应用程序/服务,有一个名为Quartz的开源.NET库(甚至更好),它在这些计算中做了许多其他非常有用的事情。上下文。
答案 2 :(得分:0)
Cronos是解决此问题的另一个绝佳选择。