在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分钟,直到它符合条件),但一定有更好的方法。

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

我已经成功地将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库(甚至更好),它在这些计算中做了许多其他非常有用的事情。