.net Core Cron 表达式计算接下来10次运行时间
前言
项目中只要用到了定时器,那么一定离不开Cron 表达式
下边是表达式的一下规则
在表达式中可以填写数字常量,也可以使用一些特殊符号创建更为复杂的任务
逗号 (',') 分开的值,例如:“1,3,4,7,8” (* * * * * *) 《--corn表达式
连词符 ('-') 制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6” 第一个* :秒(0-59) , - * /
星号 ('*') 代表任何可能的值。例如,在“小时域” 里的星号等于是“每一个小时”,等等 第二个* :分钟(0-59) , - * /
斜线 ('/') 用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数 第三个* :小时(0-23) , - * /
问号 ('?') 只能用在日和周域上,但是不能在这两个域上同时使用。 第四个* :日(1-31) ,- * ? / L W C
第五个* :月(1-12) , - * /
一些例子: 第六个* :星期(1-7)(星期日=1) , - * /
"0 0 12 * * ?" 每天12点触发 第七个*(可选,留空) :年(1970-2099) , - * /
"0 5 10 * * ?" 每天10:05触发
"0 0 10,14,16 * * ?" 每天10点、14点、16点触发
"0 0/30 9-17 * * ?" 每天9-17点每间隔半小时触发
"0 0 12 ? * 3" 表示每个星期二12点触发
"0 * 14 * * ?" 在每天14点到14:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天14点到14:55期间的每5分钟触发
获取接下来10 次运行时间
public string getCronStr(string cronStr, int number = 10) { //默认获取10次 if (number==0) { number = 10; } CronTriggerImpl cron = new CronTriggerImpl("name", "group", cronStr); //设置本地时间开始时间 ICalendar calendar = new BaseCalendar(TimeZoneInfo.Local); //获取10次执行时间 返回值是IReadOnlyList<DateTimeOffset> var arrayList = TriggerUtils.ComputeFireTimes(cron, calendar , number); //不能直接取默认值,默认值的时间是UTC的时间,要取 LocalDateTime List<DateTime> times = new List<DateTime>(); foreach (var item in arrayList) { times.Add(item.LocalDateTime); } //返回 LocalDateTime return times.ToJson(); }
不要取默认时间,这是一个大坑