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

问题描述 投票:10回答:3

我有类似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# algorithm crontab
3个回答
15
投票

我已经成功地使用了NCrontab来达到这个目的。

使用类似的东西

var schedule = CrontabSchedule.Parse("15 35 * * *");
return schedule.GetNextOccurrence(DateTime.Now);

2
投票

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

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

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

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

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


0
投票

Cronos是解决这个问题的另一个很好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.