ISO 8601
ISO 8601 是国际标准化组织制定的日期与时间表示标准,用固定格式的字符串描述时间点,消除各国「月/日/年」与「日/月/年」的歧义。它采用「大端序」从大到小书写:2026-07-23 表示日期,2026-07-23T14:30:00 表示日期加时间,中间用大写 T 分隔。因为高位在前,这种字符串按字典序排序的结果就等于按时间先后排序。
时区是它的关键部分:结尾的 Z 代表 UTC(零时区),也可写成偏移量如 +08:00;此外还支持毫秒(14:30:00.123)、周日期(2026-W30)等扩展写法。它与 Unix 时间戳不是一回事——后者是「自 1970 年起的秒数」这样一个数字,ISO 8601 则是给人看的可读字符串,二者常需相互转换。
使用中的常见误区:
- 不带偏移的时间(如
2026-07-23T14:30:00)含义未定,不能想当然按本地或 UTC 解析,跨系统传递时务必带上Z或偏移量。 Z是 UTC,不是「没有时区」,它与+00:00等价。- 标准要求日期与时间之间用
T分隔;用空格分隔是 RFC 3339 的宽松写法,并非严格的 ISO 8601。
常见问题
ISO 8601 末尾的 Z 是什么意思?
Z 表示 UTC(协调世界时,零偏移),读作「Zulu」。它等价于 +00:00,说明该时间是以 UTC 计的,而不是「无时区」。
ISO 8601 和 RFC 3339 有什么区别?
RFC 3339 是 ISO 8601 的一个更严格的子集,专为互联网协议设计,格式选择更少,但额外允许用空格代替 T 来分隔日期和时间。日常接触的多数 API 时间其实遵循的是 RFC 3339。
一个不带时区的 ISO 8601 时间该怎么解析?
标准没规定它属于哪个时区,含义完全取决于上下文约定,很容易出错。建议存储和传输时一律带上 Z 或明确的偏移量(如 +08:00),避免歧义。