# ISO 8601 时长构造器

在自然语言时长与 ISO 8601 时长（PnYnMnDTnHnMnS）之间双向转换，并校验边界情况

> 标准页面: https://elysiatools.com/zh/tools/iso-8601-duration-builder

- **分类:** Development

- **关键词:** iso 8601, 时长, duration, 转换, 时间段

## 概述

ISO 8601 时长（"PnYnMnDTnHnMnS" 区间格式）的双向转换器，补充仅处理时间点的 ISO 8601 日期转换器。

自然语言 → ISO 8601：输入 "3 years 2 months 14 days"、"2.5 hours"、"36 hours"、"1 week 12 hours"、"3天2小时"，甚至粘合形式 "2h30m" / "3days"。工具识别英文单词、数字单词（"two"）和中文数字/单位，然后输出规范的 ISO 8601 字符串。

ISO 8601 → 自然语言：粘贴 P3Y2M14D、PT36H、P1W、P0.5D 等，得到可读分解与各分量值。

校验覆盖棘手的 ISO 8601 规则：
- "T" 之后必须跟时间单位（H/M/S），绝不能是日期单位。
- 周（W）不应与年、月、日组合使用。
- 小数分数只应出现在最小分量上。
- 至少要有一个分量（单独的 P 无效）。

还按标准历法约定（1 年 ≈ 365.25 天，1 月 ≈ 30.4375 天）给出近似总秒/分/时/天，便于核对区间。

## 输入项

- **输入** (text): Natural: 3 years 2 months 14 days · 2h30m · 3天2小时 ISO 8601: P3Y2M14D · PT2H30M · P1WT12H
- **转换方向** (select)

## 适用场景

- 需要在配置文件或数据库中存储符合 ISO 8601 标准的持续时间（Duration）时。
- 需要将 API 返回的复杂 ISO 8601 时长字符串（如 PT36H）解析为人类易读的自然语言时。
- 需要校验自定义时长字符串是否符合 ISO 8601 规范（如避免周与天混用、确保 T 后面仅跟时间单位）时。

## 工作原理

- 在输入框中输入自然语言时长描述（支持中英文及缩写）或标准的 ISO 8601 时长字符串。
- 选择转换方向，支持自动识别，也可手动指定为“自然语言 → ISO 8601”或“ISO 8601 → 自然语言”。
- 工具实时解析输入内容，校验语法规则，并输出规范化的时长字符串、各分量拆解以及估算的总时间。

## 使用案例

- 开发者在编写 Java/JavaScript 代码时，快速生成或验证 java.time.Duration 兼容的 ISO 8601 字符串。
- 系统运维人员解析日志或数据库中存储的复杂时间间隔数据，将其转换为直观的自然语言。
- 产品经理或技术写作人员在撰写 API 接口文档时，快速生成标准的时长示例和说明。

## 常见问题

### 什么是 ISO 8601 时长格式？

它是一种表示时间区间的标准格式，以 P 开头，Y/M/D 表示年月日，T 之后跟 H/M/S 表示时分秒，例如 PT2H30M 表示 2 小时 30 分钟。

### 工具支持中文自然语言输入吗？

支持，您可以直接输入“3天2小时”或“1.5小时”等中文描述进行转换。

### 为什么我输入的“P1W3D”报错了？

根据 ISO 8601 标准，周（W）不应与年、月、日（D）等其他单位组合使用，工具会对此类不规范格式进行拦截校验。

### 转换时如何处理小数？

标准规定小数只能出现在最小的分量上（例如 PT1.5H 是允许的，但 P1.5Y2M 是无效的），工具会严格执行此校验。

### 估算的总秒数是如何计算的？

工具基于标准历法约定（1年约等于365.25天，1月约等于30.4375天）进行近似换算，方便您快速核对区间。

## 相关工具

- [Cron 表达式解释器](https://elysiatools.com/zh/tools/cron-expression-explainer): 解析 5 段 / 6 段 / Quartz cron 表达式为自然语言调度描述，按字段拆解，并按任意 IANA 时区列出接下来 N 次执行时间，附带 AI 生成的本地化自然语言解释
- [cURL 转 Go (net/http)](https://elysiatools.com/zh/tools/curl-to-go): 将 cURL 命令转换为 Go net/http 代码片段，包含 http.NewRequest、请求头和请求体
- [cURL 转 JavaScript (axios)](https://elysiatools.com/zh/tools/curl-to-js-axios): 将 cURL 命令转换为 JavaScript axios 代码片段，使用配置对象、请求头和数据
- [cURL 转 JavaScript (fetch)](https://elysiatools.com/zh/tools/curl-to-js-fetch): 将 cURL 命令转换为 JavaScript fetch() 代码片段，包含请求头、请求体和方法
- [cURL 转 PHP (cURL)](https://elysiatools.com/zh/tools/curl-to-php): 将 cURL 命令转换为 PHP cURL 代码片段，包含 curl_setopt、请求头和 POST 字段
- [cURL 转 Python (requests)](https://elysiatools.com/zh/tools/curl-to-python): 将 cURL 命令转换为 Python requests 代码片段，包含请求头、数据和请求方法
- [HTTP 请求测试器](https://elysiatools.com/zh/tools/http-request-tester): 浏览器内的轻量 HTTP 客户端（迷你 Postman）：发送 GET/POST/PUT/DELETE 请求，自定义请求头与请求体，查看状态码、响应头、耗时与格式化响应——全部在浏览器内完成
- [API 契约压力测试器](https://elysiatools.com/zh/tools/api-contract-stress-tester): 根据 OpenAPI 3.x 规范批量生成边界值测试请求，并可选发送到真实后端以发现契约不一致。

## 示例

- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [Android Java 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-java): Android Java 图像处理示例，包括图像读取保存、缩放和格式转换
- [Android Kotlin 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-kotlin): Android Kotlin 图像处理示例，包括图像读取保存、缩放和格式转换
- [Web Rust 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-rust): Web Rust 图像处理示例，包括图像读取保存、缩放和格式转换
