Session

.net Core Cron 表达式计算接下来10次运行时间

电脑版发表于:2022/6/20 11:36

前言

项目中只要用到了定时器,那么一定离不开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();
        }

不要取默认时间,这是一个大坑

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢