什么是 Unix 时间戳?
Unix 时间戳计算自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)起经过的秒数。它是一个与时区无关的整数,唯一标识某个时刻,是数据库和 API 中存储时间戳的通用标准。
将时间戳转换为可读日期,需除以 86400 得到天数,再加到 1970-01-01。实际上,浏览器和编程语言的内置函数会处理这些。负时间戳表示 1970 年之前的日期。
输入 Unix 时间戳(秒)或日期,即时转换。
Unix 时间戳计算自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)起经过的秒数。它是一个与时区无关的整数,唯一标识某个时刻,是数据库和 API 中存储时间戳的通用标准。
将时间戳转换为可读日期,需除以 86400 得到天数,再加到 1970-01-01。实际上,浏览器和编程语言的内置函数会处理这些。负时间戳表示 1970 年之前的日期。
把 Unix 时间戳换算成日期时,把它当作自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数,再加到这个起点上;反过来,则用某个 UTC 日期减去这个起点,数出经过的秒数。例:时间戳 1000000000 对应 2001-09-09T01:46:40Z。
| 时间戳 | UTC 日期和时间 |
|---|---|
| 0 | 1970-01-01T00:00:00Z |
| 1000000000 | 2001-09-09T01:46:40Z |
| 1721088000 | 2024-07-16T00:00:00Z |
| 1752624000 | 2025-07-16T00:00:00Z |
| 1784160000 | 2026-07-16T00:00:00Z |
使用统一的 UTC 参照点可以避免时区和夏令时切换带来的歧义——同一个时间戳在世界任何地方都指向完全相同的那一刻,每个应用只在显示时才把它换算成查看者的本地时间。
负数时间戳表示纪元(1970-01-01T00:00:00 UTC)之前的某个时刻。例如 -86400 表示纪元前 86,400 秒(即一天),也就是 1969-12-31T00:00:00 UTC。
Unix 时间戳标准是以秒为单位定义的,但一些语言和接口(尤其是 JavaScript 的 Date.now())为了更高精度使用毫秒。把以秒为单位的时间戳乘以 1000 得到毫秒,把毫秒时间戳除以 1000 得到秒。
把时间戳存成有符号 32 位整数的系统,会在 2038 年 1 月 19 日 03:14:07 UTC 发生溢出,这就是所谓的"2038 年问题"。目前大多数现代系统已改用 64 位整数存储时间戳,可用范围因此延长数十亿年,避免了这个溢出问题。
本工具使用浏览器内置的 Date 对象在 Unix 时间戳和日历日期之间互相换算;本地时间的显示结果取决于设备的时钟和时区设置,但底层的时间戳和 UTC 数值始终是明确无歧义的。
Sources: POSIX / IEEE Std 1003.1 - Base Definitions (Seconds Since the Epoch)
最后更新: 2026-08-24
Unix时间戳描述的是一个瞬间,本身不携带“首尔上午”或“纽约前一晚”这样的当地日历表述。页面把数值显示为日期时,需要按所选或页面说明的时区解释;同一个值在不同地区可能落在不同日期。来自日志、数据库和前端代码的时间戳还可能分别使用秒或更细单位,不能只因位数看起来较长就盲目删除末尾字符。排查时应从源系统文档确认单位、是否允许小数及无值的表示,再把原始值与转换结果并列保存,避免复制人类日期后丢失时区信息。
从日期反算时间戳时,要先说明输入的是UTC还是某个地区的本地墙上时间。夏令时切换可能让当地某些时刻重复或不存在,简单添加固定偏移不能覆盖历史与未来的时区规则;应让具有时区数据库的目标系统完成最终解析。负值、很远日期和旧运行环境的整数范围也可能得到不同支持,页面返回结果不代表所有数据库都能存储。调试接口时记录单位、时区名称、解析格式和运行环境,并用实际系统进行往返测试;若日志顺序关系到审计,还要核对服务器时钟与事件采集延迟。导出给他人时最好同时附上可读UTC时间和预期本地显示,尤其不要使用含糊的地区缩写。若数据跨多个服务,逐层检查是否重复应用了时区偏移;常见错误不是时间戳本身变化,而是同一瞬间被先按本地解析、随后又转换一次。