在c#中计算下一次运行时间
本文关键字:一次 运行时间 计算 | 更新日期: 2023-09-27 18:14:47
我有一个类似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分钟,直到它符合条件),但一定有更好的方法。
我已经成功地将NCrontab用于此目的。
使用类似
的内容var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);
Cronos是解决这个问题的另一个很好的选择。
您可以使用DateTime和TimeSpan自己编写代码-例如:
DateTime.Now == DateTime.Now.Date.AddHours (15).AddMinutes (35)
检查当前是否为15:35(因此需要进行一些执行),类似的检查可以对星期几、月几等执行。
或者使用一个非常好的开源。net库称为NodaTime(绝对是一个更好的方法)。
另一个选择是使用不同的架构——对于这种调度程序类型的应用程序/服务,有一个名为Quartz的开源。net库(甚至更好),它在这些计算中做了许多其他非常有用的事情。