每秒 允许的通配符[, - * /]
周期 -
间隔 秒开始,每 秒执行一次
指定
每分钟 允许的通配符[, - * /]
周期 - 分钟
间隔 分钟开始,每 分钟执行一次
指定
每小时 允许的通配符[, - * /]
周期 - 小时
间隔 小时开始,每 小时执行一次
指定
AM:
PM:
每日 允许的通配符[, - * / L W]
不指定
周期 -
间隔 日开始,每 天执行一次
每月 号最近的那个工作日
每月最后一天
指定
每月 允许的通配符[, - * /]
周期 -
间隔 月开始,每 月执行一次
指定
每周 允许的通配符[, - * / L #]
不指定
周期 -
本月最后一个
指定
不指定 允许的通配符[, - * /] 非必填
每年
周期 -
间隔 年开始,每 年执行一次
指定
分钟
小时
各字段:
表达式:
近10次执行时间:
说明
cron表达式是一种用于指定定时任务执行时间的字符串表达式。它由6个或者7个字段组成,分别表示秒、分钟、小时、天数、月份、星期几以及年。每个字段都可以使用特定的符号来指定时间范围或间隔。


    *   *   *   *   *   *   *
    |   |   |   |   |   |   |
    |   |   |   |   |   |   +-- 年 (可选字段)
    |   |   |   |   |   +------ 周 (1 ~ 7 表示 周日 ~ 周六 或者 SUN,MON,TUE,WED,THU,FRI,SAT)
    |   |   |   |   +---------- 月 (1 - 12 或者JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
    |   |   |   +-------------- 日 (1 - 31)
    |   |   +------------------ 时 (0 - 23)
    |   +---------------------- 分 (0 - 59)
    +-------------------------- 秒 (0 - 59) 

除了基本的数字范围外,cron 表达式还支持一些特殊符号和字符:
  • 星号(*):表示匹配任意值。例如,* 在分钟字段中表示每分钟都执行。
  • 逗号(,):用于分隔多个值。例如,1,3,5 在小时字段中表示 1 点、3 点和 5 点执行。
  • 斜线(/):用于指定间隔值。例如,*/5 在分钟字段中表示每 5 分钟执行一次。
  • 连字符(-):用于指定范围。例如,10-20 在日期字段中表示从 10 号到 20 号。
  • 问号(?):仅用于【日】和【周】字段,表示不指定具体值。通常用于避免冲突。
  • 井号(#):表示第几个星期几,格式:weekday#n,例如6#2表示第2个星期五。
  • 英文(L):用于【日】和【周】字段,表示本月最后一天和本周最后一个星期X。
  • 英文(W):表示离目标日期最近的工作日,比如15W表示在每月最接近15号的工作日。
  • 英文(C):用于【日】字段或【周】字段,需要和Calendar一起使用,在项目中很少使用。


一些经典的cron表达式:
cron 表达式 描述
0 0/5 * * * ? 每5分钟执行
0 0,30 * * * ? 每30分钟执行一次
0 0/15 6-23 * * ? 早6点到晚11点每15分钟执行
0 0 2 ? * SAT,SUN 周六周日凌晨2点执行
0 0 9-18 * * MON-FRI 工作日9点到18点整点执行
0 0 0 1 * ? 每月1号凌晨执行
0 0 0 ? * MON 每周一凌晨执行
0 0 0 * * ? 每天凌晨执行
0 0 2,10,14,18 * * ? 每天2点、10点、14点、18点执行
0 0 2 1 1,4,7,10 ? 季度初1号凌晨2点执行
0 0 23 L * ? 每月最后一天的23点整执行
0 15 10 ? * 6L 2024-2030 2024年至2030年的每月的最后一个星期五上午10:15触发
cron表达式非常灵活,可以满足各种定时任务的需求。