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

本文详细介绍了Cron表达式的语法及其规则,包括数字、特殊符号的应用,如星号、斜线和问号在时间范围中的含义。通过示例展示了如何使用Cron表达式设置定时任务,并提供了一个方法获取指定次数的执行时间,强调使用LocalDateTime而非默认UTC时间。
摘要由CSDN通过智能技术生成

前言

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

不要取默认时间,要取LocalDateTime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值