cron表达式详解,cron表达式写法,cron表达式例子

Cron表达式详解
本文详细解析了Cron表达式的格式及用法,包括各字段的允许值、特殊字符的意义,以及常见案例,帮助读者全面掌握Cron表达式的设置。

(cron = "* * * * * *")


cron表达式格式:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
例  "0 0 12 ? * WED" 在每星期三下午12:00 执行(年份通常 省略)
先了解每个位置代表的含义,在了解每个位置允许的范围,以及一些特殊写法,还有常用的案例,足够你掌握cron表达式

一:每个字段的允许值
字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * / 
二:允许值的意思:
Seconds (秒)         :可以用数字0-59 表示,


Minutes(分)          :可以用数字0-59 表示,


Hours(时)             :可以用数字0-23表示,


Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份


Month(月)            :可以用0-11 或用字符串  “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示


Day-of-Week(每周):可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示

三:每个符号的意义:
* 表示所有值; 
? 表示未说明的值,即不关心它为何值; 

这里简单写一下自己对*和?的理解,举个简单例子,如果我们指定每月2号执行操作,那么每月2号是星期几是不确定的,因此星期字段不能为* ,*表示所有的值,所以要用?,即我不关心2号是周几,它爱是周几是周几。
- 表示一个指定的范围; 
, 表示附加一个可能值; 
/ 符号前表示开始时间,符号后表示每次递增的值; 
L("last") ("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。 如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。 
W("weekday") 只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个 月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第 16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在 day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。 
# 只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。 
C 指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天。
四:一些cron表达式案例
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 

0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发 
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发 
0 15 10 * * ? 2005 2005年的每天上午10:15触发 
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发 
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发


"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的10分30秒触发任务
"30 10 1 * * ?" 每天1点10分30秒触发任务
"30 10 1 20 * ?" 每月20号1点10分30秒触发任务
"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 15到45秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务

五:表达式生成器
有很多的cron表达式在线生成器,这里给大家推荐几款

http://www.pdtools.net/tools/becron.jsp (已失效)

或者

http://cron.qqe2.com/

<think>我们参考了多个关于cron表达式的引用,特别是引用[1][3][4]中提供的详细格式和示例。用户希望了解cron表达式的具体写法,包括格式、符号含义和示例。 根据引用[1]:cron表达式格式为:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 引用[4]详细解释了各个符号的含义,引用[3]则提供了丰富的示例。 因此,我们将按照以下结构组织回答: 1. cron表达式的基本结构(7个字段) 2. 每个字段允许的值和特殊字符的含义(参考引用[4]并补充) 3. 常用示例(参考引用[3]并补充说明) 4. 注意事项(如冲突解决,引用[1]提到?的作用) 注意:引用[2]提到cron表达式与正则表达式的类比,但这不是重点,可以简单提及。 另外,根据用户要求,需要生成相关问题。 回答要求: - 使用中文 - 结构清晰,逐步解释 - 在适当位置添加引用标记(如[^1]) 由于用户要求生成相关问题,我们在最后生成相关问题。 开始回答:</think>### Cron 表达式详解写法指南 Cron 表达式用于定义定时任务的执行周期,格式为 `{秒} {分} {时} {日} {月} {周} {年(可选)}`,共 **7 个字段**(年份可省略)。以下是核心规则和示例: --- #### 一、字段含义与取值范围 | 字段 | 允许值 | 特殊字符 | 说明 | |------------|------------------------|------------------------|--------------------------| | **秒** | `0-59` | `, - * /` | 每秒可精确控制 | | **分** | `0-59` | `, - * /` | | | **时** | `0-23` | `, - * /` | | | **日** | `1-31` | `, - * / ? L W` | 需注意与“周”字段冲突[^1] | | **月** | `1-12` 或 `JAN-DEC` | `, - * /` | | | **周** | `1-7` 或 `SUN-SAT` | `, - * / ? L #` | `1`=周日,`7`=周六 | | **年** | `1970-2099`(可选) | `, - * /` | 省略时表示每年 | --- #### 二、特殊符号用法(核心规则) 1. **`*`** - 表示 **所有可能值**(如分钟字段 `*` = 每分钟都触发)。 - 示例:`0 * * * * ?` → 每分钟的 **0 秒** 触发(如 12:00:00, 12:01:00...)[^3]。 2. **`?`** - **仅用于日或周字段**,表示“不指定值”,解决日和周字段的冲突[^1][^4]。 - 示例:`0 0 12 ? * MON` → 每周一 12:00:00 触发(日字段用 `?` 忽略)。 3. **`,`** - 枚举多个值。 - 示例:`0 15,30 * * * ?` → 每小时的第 **15 分** 和 **30 分** 触发(如 08:15:00, 08:30:00)。 4. **`-`** - 定义连续范围。 - 示例:`0 0 9-17 * * ?` → 每天 **9 点到 17 点** 的整点触发(9:00, 10:00...17:00)。 5. **`/`** - 指定间隔频率。 - 示例:`0 0/5 * * * ?` → 每 **5 分钟** 触发一次(0:00, 0:05, 0:10...)。 6. **`L`** - 表示 **最后一天/最后一周**。 - 示例:`0 0 0 L * ?` → 每月最后一天的 **00:00:00** 触发[^3][^4]。 7. **`W`** - 最近的工作日(避开周末)。 - 示例:`0 0 0 15W * ?` → 每月 **15 日最近的工作日** 触发(如 15 日是周六,则 14 日触发)[^4]。 8. **`#`** - 指定第几周的星期几。 - 示例:`0 0 0 ? * 6#3` → 每月 **第 3 个周六** 的 00:00:00 触发[^3][^4]。 --- #### 三、经典示例(直接可用) | 表达式 | 含义 | |-------------------------|----------------------------------------------------------------------| | `0 * * * * ?` | 每分钟的 **0 秒** 触发 | | `0 0/30 * * * ?` | 每 **30 分钟** 触发一次(如 08:30, 09:00, 09:30...) | | `0 0 9,18 * * ?` | 每天 **9:00** 和 **18:00** 触发 | | `0 0 12 ? * WED` | 每周三 **12:00:00** 触发[^1] | | `0 0 0 1 * ?` | 每月 **1 日** 00:00:00 触发 | | `0 0 8-10 * * MON-FRI` | 周一至周五 **8:00、9:00、10:00** 各触发一次 | | `0 0 0 LW * ?` | 每月 **最后一个工作日** 的 00:00:00 触发[^4] | | `0 0 10 ? * 6L` | 每月 **最后一个周五** 的 10:00:00 触发 | | `0 0 12 1 6 ? 2025` | **2025 年 6 月 1 日** 12:00:00 触发(带年份) | --- #### 四、注意事项 1. **冲突解决**: - **日和周字段不能同时为 `*`**(否则逻辑冲突),需用 `?` 忽略其中一个[^1][^4]。 - ✅ 正确:`0 0 0 ? * MON`(忽略日)或 `0 0 0 * * ?`(忽略周)。 - ❌ 错误:`0 0 0 * * MON`(日和周都指定)。 2. **字符大小写**: - 月份和周名称 **不区分大小写**(如 `MON` 和 `mon` 等效)。 3. **工具验证**: - 使用在线工具(如 [Cron Maker](https://www.cronmaker.com/))验证表达式逻辑。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值