Unix 时间戳是什么?秒/毫秒与北京时间换算详解
看日志、调接口时经常碰到一串 10 位或 13 位的数字,比如 1727222400。这就是 Unix 时间戳:从 1970 年 1 月 1 日 0 点(UTC)到现在的秒数(或毫秒数)。它是计算机世界统一的时间语言。
但人脑不擅长把 1727222400 翻译成「2024 年 9 月 25 日」。本文讲清时间戳的换算逻辑,文末有免费转换工具。
秒 vs 毫秒:差 1000 倍的坑
10 位数字是秒级时间戳(如 1727222400),13 位是毫秒级(如 1727222400000)。两者相差 1000 倍,这是新手最常踩的坑:把毫秒戳当成秒去换算,会得到 1970 年的日期;反过来则会得到几万年后的未来时间。
记忆方法:秒级戳 10 位,毫秒戳 13 位。Java 的 System.currentTimeMillis() 和 JS 的 Date.now() 返回的都是 13 位毫秒戳;Python 的 time.time() 和 PHP 的 time() 返回的是秒(带小数或整数)。对接接口文档时先看它要的是哪个单位。
时间戳与北京时间的换算
换算分两步:先把时间戳变成 UTC 时间,再加 8 小时得到北京时间。比如时间戳 1727222400 对应 UTC 2024-09-25 00:00:00,北京时间就是 2024-09-25 08:00:00。
手动计算容易错在时区这一步:很多人忘了加 8 小时,换算出来发现「差了 8 小时」,其实不是工具错了,而是 UTC 和北京时间本来就差 8 小时。用转换工具时确认它输出的是北京时间(UTC+8)即可。
- 确认时间戳是 10 位(秒)还是 13 位(毫秒)。
- 在转换工具的时间戳输入框粘贴数字,工具会自动识别单位。
- 点击转换,得到 YYYY-MM-DD HH:mm:ss 格式的北京时间。
- 反向操作:在日期时间选择器里选好时间,一键得到秒/毫秒两种时间戳。
打开免费的「时间戳转换」工具,本地处理、不用注册。
时间戳的常见用途
一是接口签名:很多 API 用时间戳做请求的「有效期」判断,防止重放攻击。二是日志排序:数字比对比字符串日期快得多,日志系统普遍用时间戳记录事件。三是缓存过期:比如「token 2 小时后过期」,存的就是「当前时间戳 + 7200」。
理解时间戳后,看日志、排查「为什么我的请求提示过期」这类问题会顺畅很多:把日志里的时间戳换算一下,就知道到底是哪一秒出的事。