固定宽度的可排序写法
ISO 8601 用固定顺序、固定宽度的字段书写日期时间:年-月-日,T 分隔,时:分:秒,末尾接时区。因为各字段宽度固定且从大到小排列,同一时区下的字符串按字典序排序就等于按时间排序,这也是它在配置、日志与接口中被广泛采用的原因。它的完整定义很宽,实际工程里通常只用其中一个子集。
基本信息
| 日期 | YYYY-MM-DD,基本格式可省略连字符写成 YYYYMMDD |
|---|---|
| 时间 | hh:mm:ss,可带小数秒,也可只写到小时或分钟 |
| 分隔符 | 日期与时间之间用字母 T,允许省略到只写其一 |
| 时区 | Z 表示 UTC,或写作正负偏移如 +08:00、-05:00 |
| 扩展形式 | 周年日期 YYYY-Www-D、序数日期 YYYY-DDD、周期与区间写法 |
典型使用场景
- 接口时间字段:固定宽度便于排序与比较
- 日志时间戳:带偏移量可避免跨时区误读
- 配置与文件名:连字符与冒号在不同系统上有兼容差异,需按用途取舍
- 数据交换:解析前先确认对方是 ISO 8601 还是邮件类格式
- 审计记录:带偏移的唯一时刻表示便于事后对齐
常见合法写法
常见合法写法
2026-10-17T09:30:00+08:00 # 带偏移的完整时刻
2026-10-17T01:30:00Z # 等价的 UTC 写法
2026-10-17T01:30:00.123Z # 小数秒
2026-10-17 # 仅日期
2026-10 # 仅到月份
2026-W42-5 # 周年日期:第 42 周第 5 天
2026-290 # 序数日期:第 290 天
P1DT2H30M # 时长:1 天 2 小时 30 分
2026-10-17T00:00Z/2026-10-18T00:00Z # 时间区间变体与注意事项
| 写法 | 含义 | 注意 |
|---|---|---|
| T 与空格 | 部分规范允许用空格替代 T | 需双方约定,解析库默认不一定接受 |
| 小数秒分隔 | 点号或逗号 | 不同规范偏好不同,跨系统建议用点号 |
| 缺省偏移 | 不写偏移表示本地时间 | 含义不唯一,接口中应禁止 |
| 周年与序数 | 按周或按年内天序号表示 | 与自然年份不一一对应,统计时慎用 |
| 闰秒 | 写作 23:59:60 | 多数系统无法表示,需专门处理 |
ISO 8601 是通用标准,RFC 3339 是面向互联网的严格子集:后者要求带偏移量、用点号表示小数秒,并且只允许有限的几种写法。做接口设计时,先明确采用哪个,再约定字段长度与是否允许省略。
带偏移的字符串不能直接比较大小:2026-10-17T09:30:00+08:00 与 2026-10-17T02:30:00Z 是同一时刻,但字符串并不相等。做排序、去重或区间判断前,统一换算成 UTC 再比较。