Unix 时间戳(Unix timestamp 或 POSIX time),是计算机领域最通用的时间表示方式:它把时间记录为一个整数,表示从 1970 年 1 月 1 日 00:00:00 UTC(称为 Unix 纪元,Epoch)起,到某一时刻所经过的秒数。这个数字与时区无关,全球任何地方在同一瞬间得到的时间戳完全相同。
10 位时间戳精确到秒,例如 1700000000 对应 2023 年 11 月 15 日前后。13 位时间戳精确到毫秒,就是 10 位时间戳乘以 1000,例如 1700000000000。两者转换只需乘除 1000,这也是 JavaScript 中 Date.now() 返回 13 位、而多数后端语言 time() 返回 10 位的原因。
判断方法很简单:看位数。10 位是秒,13 位是毫秒。此外还有微秒(16 位)、纳秒(19 位)等更精细的表示,常见于日志与数据库系统。
1970 年 1 月 1 日是 Unix 操作系统诞生初期由开发者选定的纪元起点,并没有特别的天文含义,主要是为了计算方便。选择它作为标准后,整个计算机产业沿用至今。
早期 Unix 系统用 32 位有符号整数存储时间戳,其最大值为 2147483647,对应 2038 年 1 月 19 日 03:14:07 UTC。超过这一刻后,数值会溢出成负数,被解析成 1901 年。这就是著名的"2038 年问题"。
现代 64 位系统已普遍改用 64 位整数,可表示的时间跨度达数千亿年,问题基本解决。但一些嵌入式设备、老旧数据库与遗留代码仍可能存在风险,需要在升级时留意。
时间戳是以 UTC 定义的绝对数值,不含时区信息。同一个时间戳,在北京显示会比在伦敦早 8 小时的钟点,但时间戳本身完全一致。这就是为什么跨时区系统都推荐用时间戳存储数据,展示时再按用户时区格式化。
关于闰秒,Unix 时间戳采取"忽略"策略:它按每天 86400 秒连续计数,不承认 23:59:60。遇到闰秒时,系统通常把这一秒重复一次或由操作系统做平滑处理,保证时间戳单调连续。
日常使用可以直接打开本站的 时间戳转换器,一键完成当前时间戳查看、时间戳转北京时间、北京时间转时间戳三项操作,并同时给出 10 位与 13 位结果,无需自己计算。