最近工作碰到个小问题,需要获取cron表达式的上一次最近运行的时间,找了好一会没找到获取的方法,下载了Quartz源码,有点乱,就没仔细看,其实这个问题完全可以从设计上规避掉,在表里存下每次运行后的下次运行时间,后面只需要判断当前时间和表里存的下次运行时间比较即可,附 获取cron表达式下次运行时间C#代码,这个在网上比较多,我个人记录下
public static DateTime GetNextRunTime(string cron)
{
var dt = GetCronSchdule(cron, 1, DateTimeOffset.Now);
return dt.First();
}
/// <summary>
/// Corn表达式的运行时间
/// </summary>
public static List<DateTime> GetCronSchdule(string cron, int times, DateTimeOffset startTime)
{
List<DateTime> timeSchdule = new List<DateTime>();
if (!CronExpression.IsValidExpression(cron))
{
return timeSchdule;
}
ITrigger trigger1 = TriggerBuilder.Create().WithCronSchedule(cron)
.Build();
DateTimeOffset? LastTime = startTime;
for (int i = 0; i < times; i++)
{
DateTimeOffset? s = trigger1.GetFireTimeAfter(LastTime);
LastTime = s;
timeSchdule.Add(s.Value.LocalDateTime);
}
return timeSchdule;
}