# Cron 表达式解析在线工具教程：中文翻译、执行时间预测与代码生成

> 来源：工具派（https://gjupai.com） 原文页面：https://gjupai.com/tutorial/cron-expression-parser-guide

## 工具简介

**Cron 表达式解析**是工具派推出的一款免费在线开发辅助工具：把 `0 9 * * 1-5` 这类让人看了一头雾水的 Cron 定时表达式，直接翻译成「工作日早上 9 点执行」这样人类可读的中文描述，并自动推算出接下来 10 次的具体执行时间。它同时支持 Linux Crontab 的 5 位格式（分 时 日 月 周）和 Spring / Quartz 常用的 6 位格式（秒 分 时 日 月 周），既能粘贴已有表达式做解析校验，也能通过可视化配置逐字段生成表达式，还能一键生成 Spring `@Scheduled`、Java Quartz、Linux crontab、Python APScheduler 四种框架的接入代码，解析与计算全部在浏览器本地完成，打开即用。

## 功能亮点

- **双格式支持**：可在「Linux Crontab (5位)」和「Spring/Quartz (6位)」两种格式间一键切换，分别对应「分 时 日 月 周」和「秒 分 时 日 月 周」字段结构，覆盖绝大多数后端定时任务场景。
- **人类可读含义翻译**：输入表达式后即时给出中文描述，例如 `0 9 * * 1-5` 会被翻译成「整点，9 时，周一,周二,周三,周四,周五」，常见写法如每天凌晨、每小时整点还有专属描述。
- **接下来 10 次执行时间**：基于当前时间逐分钟推算，列出未来 10 次触发的完整日期时间和对应星期，方便核对表达式是否符合预期，最长可向前推算两年。
- **可视化配置**：点「可视化配置」展开字段面板，秒、分、时、日、月、周每个字段一个输入框，支持 `*`、`,`、`-`、`/` 语法，还带「任意」快捷按钮，周字段更有一到日的中文快捷按钮，改字段即实时更新表达式。
- **11 个常用预设**：每分钟、每5分钟、每30分钟、每小时、每天凌晨、每天3点、每天9点、每周一、每月1日、工作日9点、周末10点，点击即套用并同步刷新可视化字段。
- **四种代码生成**：解析合法时自动生成 Spring `@Scheduled`（默认）、Java Quartz Trigger、Linux crontab 行、Python APScheduler 四种接入代码，复制进项目即可运行。
- **清晰的错误提示**：字段数量不对、数值越界（如分钟填 60）、间隔/范围格式错误都会用红色提示明确指出是哪个字段、哪一段出了问题。

## 参数说明

| 参数 | 说明 | 默认值 / 取值范围 |
| --- | --- | --- |
| 格式切换 | 选择表达式的字段结构 | Linux Crontab (5位，默认）/ Spring/Quartz (6位） |
| Cron 表达式 | 要解析的表达式，可直接输入或粘贴，支持清空和复制 | 默认 `0 9 * * 1-5`（6位格式为 `0 0 9 * * 1-5`） |
| 秒 | 6 位格式下可视化配置中的秒字段 | 0–59，默认 `0` |
| 分 | 分钟字段 | 0–59，默认 `0` |
| 时 | 小时字段 | 0–23，默认 `9` |
| 日 | 每月第几日 | 1–31，默认 `*`（任意） |
| 月 | 月份 | 1–12，默认 `*`（任意） |
| 周 | 星期几，0 代表周日 | 0–6，默认 `1-5`（工作日） |
| 常用预设 | 点击套用常用表达式，并按当前格式自动选用 5 位或 6 位版本 | 每分钟、每5分钟、每30分钟、每小时、每天凌晨、每天3点、每天9点、每周一、每月1日、工作日9点、周末10点 |
| 代码生成语言 | 生成的接入代码模板 | SPRING（默认）/ JAVA / LINUX / PYTHON |

## 使用步骤

1. **打开工具页面**：上方是标题和说明，主体卡片内自上而下依次是格式切换、常用预设、Cron 表达式输入框、解析结果和语法说明，无需安装即可使用。

![Cron 表达式解析工具主界面：顶部标题区下方依次为格式切换按钮（Linux Crontab 5位/Spring-Qua](article/202607/1783994186247_784.png)

2. **选择格式**：默认是「Linux Crontab (5位)」，如果你的项目用 Spring `@Scheduled` 或 Quartz，点「Spring/Quartz (6位)」切换到带秒的 6 位格式；切换时输入框会重置为该格式的默认示例。

3. **输入或粘贴表达式**：在「Cron 表达式」输入框中粘贴要解析的表达式，页面会实时解析。也可以点输入框右侧的「清空」重新输入，或点「复制」把当前表达式拷走。

4. **套用预设或可视化配置（可选）**：不想手写时点「常用预设」里的方案一键套用；点「可视化配置」展开字段面板，逐个字段填值——周字段可以直接点「一」到「日」的快捷按钮，「任意」按钮则把字段重置为 `*`。

5. **查看解析结果**：表达式合法时，蓝色「含义」区给出中文描述，下方左侧列出「接下来 10 次执行时间」（含星期），右侧是代码生成区；表达式非法时会出现红色错误提示，按提示修正对应字段即可。

6. **生成接入代码**：在「代码生成」区切换 SPRING / JAVA / LINUX / PYTHON，得到对应框架的模板代码——SPRING 给出 `@Scheduled(cron = "...")` 注解示例，JAVA 给出 Quartz TriggerBuilder，LINUX 给出可追加到 `crontab -e` 的完整行，PYTHON 给出 APScheduler 的 `add_job` 调用。

## 使用技巧

- **先用预设再找感觉**：对语法不熟时，先点几个预设（如「工作日9点」「每月1日」），观察输入框、含义描述和执行时间的变化，比直接背语法快得多。
- **用执行时间反推验证**：写完表达式别急着用，先看「接下来 10 次执行时间」的日期和星期是否符合预期——比如 `1-5` 的列表里不应出现周六周日，一眼就能发现问题。
- **注意 5 位和 6 位的区别**：Spring `@Scheduled` 用的是 6 位（带秒），直接粘贴 Linux 的 5 位表达式会报字段数量错误；先切对格式再粘贴，或让可视化配置帮你生成对应格式。
- **周字段 0 是周日**：本工具周字段取值 0–6，其中 0 和 7 习惯上都表示周日，但这里按 0–6 处理，「周末10点」预设写作 `0,6`（周日和周六）。
- **报错信息直接指明字段**：出现「分钟 越界: 60（应在 0-59 之间）」这类提示时，按提示定位到具体字段和片段修改即可，不用整体重写。
- **底部语法说明随时查**：页面底部的语法卡片汇总了 `*`（任意值）、`,`（列表）、`-`（范围）、`/`（间隔）四种符号和 4 个经典示例，忘了写法时扫一眼即可。

## 常见问题

**Q1：5 位和 6 位格式有什么区别？**
5 位是 Linux crontab 标准格式，字段为「分 时 日 月 周」；6 位在最前面多了「秒」字段，即「秒 分 时 日 月 周」，是 Spring `@Scheduled` 和 Quartz 使用的格式。字段数不匹配时工具会提示「Cron 表达式需要 5/6 个字段」。

**Q2：周字段里的 1-5 和 0,6 是什么意思？**
周字段取值 0–6，0 代表周日，1–5 代表周一到周五。`1-5` 是范围写法表示工作日，`0,6` 是列表写法表示周日和周六（周末）。

**Q3：执行时间里的「秒」是怎么算的？**
执行时间按分钟粒度推算：6 位格式下秒字段会被解析校验，但列出的 10 次执行时间精确到分钟，对绝大多数定时任务场景已经足够。

**Q4：可视化配置改了字段，输入框会跟着变吗？**
会。可视化面板里任何字段的修改都会实时拼成新的表达式写回输入框，反之套用预设时字段面板也会同步刷新，两边始终保持一致。

**Q5：表达式里的 `?` 是什么意思？**
`?` 和 `*` 一样表示「任意值」，通常用在「日」和「周」字段中避免两者冲突。本工具解析时会把它当作任意值处理。

**Q6：生成的 Python 代码可以直接跑吗？**
生成的是基于 APScheduler 的 `BackgroundScheduler` 模板，需先 `pip install apscheduler`，并把 `my_job` 换成你自己的任务函数即可运行；5 位格式下各字段会按 minute、hour、day、month、day_of_week 映射。

