cron表达式

1. 什么是cron表达式

cron表达式说白了就是一串由若干数字、空格、符号按照一定的规则组成的一组字符串,这个字符串能用来表达时间信息。

2. cron表达式的结构

cron表达式从左到右分为七个域,这七个域之间以空格隔开,从左到右分别代表的值为:
秒 分 时 日 月 周 年(可以不写)

3. cron表达式每个域的取值范围及说明

字段 允许值
0-59, ',', '-', '*', '/'
0-59, ',', '-', '*', '/'
0-23, ',', '-', '*', '/'
1-31, ',', '-', '*', '/', '?', 'L', 'W', 'C'
1-12, JAN-DEC, ',', '-', '*', '/'
1-7, SUN-SAT, ',', '-', '*', '/', '?', 'L', 'C', '#'
空, 1970-2099,',', '-', '*', '/'
  • 3.1 秒
    0-59:秒域的值,表示在第多少秒的时候触发,如10表示在第十秒的时候触发
    :用来分隔值的符号,可以让秒域有多个值,如5,10,15表示分别在第5秒,第10秒,第15秒的时候触发。
    -:表示一个范围值,在指定范围内触发,如0-5表示在第0秒到第5秒,每秒触发一次
    *:这个表示每秒进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从第5秒开始,每10秒触发一次,也就是在第5秒,15秒,25秒,35秒,45秒,55秒分别触发一次。
  • 3.2 分
    0-59:分域的值,表示在第多少分钟的时候触发,如10表示在第十分钟的时候触发
    :用来分隔值的符号,可以让分域有多个值,如5,10,15表示分别在第5分钟,第10分钟,第15分钟的时候触发。
    -:表示一个范围值,在指定范围内触发,如0-5表示在第0分钟到第5分钟,每分钟触发一次
    *:这个表示每分钟进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从第5分钟开始,每10分钟触发一次,也就是在第5分钟,15分钟,25分钟,35分钟,45分钟,55分钟分别触发一次。
  • 3.3 时
    0-23:时域的值,表示在几点的时候触发,如10表示在十点的时候触发。
    :用来分隔值的符号,可以让时域有多个值,如5,10,15表示分别在5点,10点,15点的时候触发。
    -:表示一个范围值,在指定范围内触发,如0-5表示在0点到5点,每小时触发一次
    *:这个表示每小时进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从5点开始,每10个小时触发一次,也就是在5点,15点分别触发一次。
  • 3.4 日
    1-31:日域的值,表示在几号的时候触发,如10表示在10号的时候触发。
    :用来分隔值的符号,可以让日域有多个值,如5,10,15表示分别在5号,10号,15号的时候触发。
    -:表示一个范围值,在指定范围内触发,如1-5表示在1号到5号,每天触发一次
    *:这个表示每天进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如5/10这个的意思表示从5号开始,每10天触发一次,也就是在5号,15号分别触发一次。
    ?:与周互斥,如果使用这个值则表示完全使用周设置的值,日期这个值无意义
    L:表示最后一天执行
    W:表示距离日期最近的一个工作日触发,如17W,如果17号是周六,那么会在16号,也就是周五触发,如果17号是周日,那么就会在18号,也就是周一触发
    C:计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。
  • 3.5 月
    1-12:月域的值,表示在几月的时候触发,如10表示在10月的时候触发
    JAN-DEC:月的英文缩写显示,从一到十二月
    :用来分隔值的符号,可以让月域有多个值,如5,10表示分别在5月,10月的时候触发。
    -:表示一个范围值,在指定范围内触发,如1-5表示在1月到5月,每月触发一次
    *:这个表示每月进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如5/2这个的意思表示从5月开始,每2个月触发一次,也就是在5月,7月,9月,11月分别触发一次。
  • 3.6 周
    1-7:周域的值,表示在周几的时候触发,需要注意的是,这里一周的开始是周日。如1表示在周日的时候触发。
    SUN-SAT:周的英文缩写方法,从周日到周六
    :用来分隔值的符号,可以让周域有多个值,如2,3,4表示分别在周一,周二,周三的时候触发。
    -:表示一个范围值,在指定范围内触发,如2-4表示在周一到周三,每天触发一次
    *:这个表示每周进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如2/2这个的意思表示从周一开始,每2天触发一次,也就是在周一,周三,周五,周日分别触发一次。
    ?:与日互斥,如果使用这个值则表示完全使用日设置的值,周这个值无意义
    L:表示该周最后一天执行,即周六触发
    C:计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如1C在周字段中就相当于星期日之后的第一天
    #:用来指定具体的周数,#前面代表星期,#后面代表本月第几周。如1#2表示第二周的周日
  • 3.7 年
    :空就是什么都不填,表示每年触发一次,和*的意思一样
    1970-2099:年域的值,表示在几几年的时候触发,如2023表示在2023年的时候触发
    :用来分隔值的符号,可以让年域有多个值,如2023,2024,2025表示分别在2023年,2024年,2025年的时候触发。
    -:表示一个范围值,在指定范围内触发,如2023-2025表示在2023年到2025年,每年触发一次
    *:这个表示每年进行触发一次
    /:这个表示步进触发,/前面的值表示触发的开始时间,后面的值表示偏移量,如2023/2这个的意思表示从2023年开始,每2年触发一次,也就是在2023年,2025年,2027年,...分别触发一次。

4. 总结

  1. 在使用cron表达式的时候,需要注意的是里面的符号全是英文的符号。
  2. 需要注意日域与周域这两个是互斥的,永远只会有一个生效。
  3. cron表达式是有七位,但是其年域可以省略,所以基本上都是只写了六位。
posted @   _mcj  阅读(217)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示