博客
简体中文

Cron 表达式解析 — 在线翻译与下次执行时间

Cron 表达式解析,支持 5/6 位、接下来 5 次执行时间和时区

在浏览器中处理 · 不上传任何内容

载入示例

5 位写法:分 时 日 月 周 · 6 位写法:秒 分 时 日 月 周

每隔 5 分钟

含义

每隔 5 分钟

接下来 5 次执行

    功能简介

    */5 * * * * 这样简短的 cron 表达式很难看懂,几个月后连写的人自己都未必记得。在这里输入表达式,就会用一句话解释它的含义,并按你选择的时区算出接下来实际执行的 5 个时间。这句解释由开源库 cronstrue 生成。

    使用方法

    1. 输入 cron 表达式,或点击示例按钮。5 位写法和带秒的 6 位写法都可以。
    2. 在“含义”下查看解释。
    3. 选择时区,接下来 5 次执行时间会按它重新计算。默认使用浏览器的时区。
    4. 使用 @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。其他写法都会报错。

    没找到想要的工具?