Cron 表达式解析 — 在线翻译与下次执行时间
Cron 表达式解析,支持 5/6 位、接下来 5 次执行时间和时区
在浏览器中处理 · 不上传任何内容
5 位写法:分 时 日 月 周 · 6 位写法:秒 分 时 日 月 周
每隔 5 分钟
含义
每隔 5 分钟
接下来 5 次执行
功能简介
*/5 * * * * 这样简短的 cron 表达式很难看懂,几个月后连写的人自己都未必记得。在这里输入表达式,就会用一句话解释它的含义,并按你选择的时区算出接下来实际执行的 5 个时间。这句解释由开源库 cronstrue 生成。
使用方法
- 输入 cron 表达式,或点击示例按钮。5 位写法和带秒的 6 位写法都可以。
- 在“含义”下查看解释。
- 选择时区,接下来 5 次执行时间会按它重新计算。默认使用浏览器的时区。
- 使用
@daily这类别名时,旁边会显示它对应的标准表达式。
工作原理
- 字段顺序:5 位依次是分(0-59)时(0-23)日(1-31)月(1-12)周(0-7);6 位在前面加上秒(0-59)。星期 0 和 7 都是周日,1 是周一(Unix cron 和 Spring),这一点与 Quartz 中 1 是周日不同。
- 每个字段可以用
*、数字、范围a-b、列表a,b和步长*/n、a-b/n或a/n。月份和星期还可以用JAN、MON这类英文缩写。在日和星期字段中,?与*等同。 - 别名:
@yearly(0 0 1 1 *)、@monthly(0 0 1 * *)、@weekly(0 0 * * 0)、@daily(0 0 * * *)和@hourly(0 * * * *)。 - 日和星期都不是
*时,只要其中一个满足就会执行。 - 下次执行时间是沿着所选时区的时钟逐个字段推算出来的,最多向后查找 8 年。像 2 月 30 日这样永远不会到来的日期,会显示提示。
- 表达式无效时,会告诉你是哪个字段的哪个值有问题。
示例
| 表达式 | 含义 |
|---|---|
*/5 * * * * |
每 5 分钟 |
0 9 * * 1-5 |
工作日 09:00 |
0 0 9 * * 1-5 |
6 位写法:工作日 09:00:00 |
30 2 1 * * |
每月 1 日 02:30 |
补充说明
- 如果服务器所在的时区与你的浏览器不同,实际执行时间也会不同,检查时请选择服务器使用的时区。
- 对于每分钟、每秒这类密集的表达式,接下来 5 次执行时间会一个紧接一个。
常见问题
5 位和 6 位有什么区别?
5 位依次是分 时 日 月 周;6 位在最前面加上秒,即秒 分 时 日 月 周。Linux crontab 用 5 位,Spring 的 @Scheduled 用 6 位,工具按字段数区分。星期的编号与 Unix cron 和 Spring 相同:0 和 7 是周日,1 是周一。Quartz 用 1 = 周日到 7 = 周六,所以带 ? 且星期写成数字的 6 位表达式会显示警告。
能解析 Quartz 表达式吗?
星期写成 MON、FRI 这类英文名称的 6 位表达式可以直接解析。数字星期的编号方式不同(Quartz 中 1 = 周日,本工具 0 和 7 = 周日、1 = 周一),会差一天,请改用名称或把数字减 1。如果表达式是给同样接受 ? 的 Spring 用的,可以忽略这个警告。末尾带年份的 7 位写法以及 L、W、# 记法都不支持。
同时设置了日和星期会怎样?
按经典 cron 规则,只要其中一个满足就会执行。例如 0 0 13 * 5 表示每月 13 日或每个周五的零点。如果两者之一是 *,就只以另一个为条件。
夏令时切换怎么处理?
按所选时区的当地时间计算。春季拨快时被跳过的时间当天不会执行,出现两次的时间只在第一次出现时执行一次。实际的调度器可能因实现不同而表现不同。
支持 L、W、# 这些扩展吗?
不支持。可以识别的有数字、范围(-)、列表(,)、步长(/)、* 和 ?、月份和星期的英文缩写(JAN、MON),以及别名 @hourly、@daily、@weekly、@monthly 和 @yearly。其他写法都会报错。