全部工具 / 对比指南 / Unix 时间戳和 ISO 8601 怎么选

Unix 时间戳和 ISO 8601 怎么选

一句话结论

存储和计算用 Unix 时间戳(整数,无时区歧义),接口传输和日志给人看用 ISO 8601(自带时区、可读)。最稳妥的做法是:数据库存时间戳或带时区的 timestamptz,接口输出 ISO 8601 带 Z 标识的 UTC 时间。

核心区别对照

示例Unix 时间戳ISO 8601
本质从 1970-01-01 UTC 起的秒数带时区标记的字符串
时区信息不含,隐含 UTC明确(Z 或 +08:00)
可读性差,人看不出是什么时候好,一眼能读
存储成本4-8 字节整数20-30 字节字符串
比较与计算直接数值比较,最快需先解析,同格式下字典序可比
2038 年问题32 位整数会溢出无此问题

Unix 时间戳

一个整数,表示从 1970-01-01 00:00:00 UTC 起经过的秒数(毫秒版本是 13 位)。它不含时区,天然是 UTC,比较大小就是比较整数,排序和范围查询极快,存储也最省。缺点是人对着一串数字看不出日期,而且 32 位整数会在 2038 年 1 月溢出——新系统务必用 64 位。

ISO 8601

形如 2026-01-27T08:26:40Z 的字符串,格式固定、自带时区(Z 表示 UTC,+08:00 表示偏移),人可以直读,而且同格式下字典序等于时间序,字符串排序即可排序。它是 JSON 接口、日志文件、HTTP 头的事实标准。缺点是体积大、比较前需解析。

怎么选

相关工具

常见问题

秒和毫秒怎么区分

10 位是秒,13 位是毫秒。混用会导致时间相差 1000 倍,是接口对接里最常见的坑之一。

Z 是什么意思

Z 代表 UTC 零时区(Zulu time)。2026-01-27T08:26:40Z 就是 UTC 时间的这个时刻,等价于北京时间 16:26:40。

2038 年问题真的会发生吗

会,但只影响把时间戳存成 32 位有符号整数的老系统。用 64 位整数或数据库的 timestamptz 类型即可规避。