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)即可。

  1. 确认时间戳是 10 位(秒)还是 13 位(毫秒)。
  2. 在转换工具的时间戳输入框粘贴数字,工具会自动识别单位。
  3. 点击转换,得到 YYYY-MM-DD HH:mm:ss 格式的北京时间。
  4. 反向操作:在日期时间选择器里选好时间,一键得到秒/毫秒两种时间戳。
💡 不想看文字?直接动手试试
打开免费的「时间戳转换」工具,本地处理、不用注册。
免费使用时间戳转换 →

时间戳的常见用途

一是接口签名:很多 API 用时间戳做请求的「有效期」判断,防止重放攻击。二是日志排序:数字比对比字符串日期快得多,日志系统普遍用时间戳记录事件。三是缓存过期:比如「token 2 小时后过期」,存的就是「当前时间戳 + 7200」。

理解时间戳后,看日志、排查「为什么我的请求提示过期」这类问题会顺畅很多:把日志里的时间戳换算一下,就知道到底是哪一秒出的事。

常见问题

怎么区分时间戳是秒还是毫秒?
看数字长度:10 位是秒,13 位是毫秒,这是最常用的判断方法。13 位毫秒戳是 JavaScript 里 Date.now() 的返回值,所以前端开发中特别常见。
时间戳有时区吗?为什么换算出来差 8 小时?
时间戳本身没有时区,它就是一个 UTC 时间点。显示成「几点」时才和时区有关:同一个时间戳,在北京显示为 20:00,在伦敦就显示为 12:00。
我拿到的时间戳好像不对,怎么验证?
用当前时间戳工具获取「现在的秒数」,和你手里的时间戳对比:差几分钟是正常的(生成时间不同),差好几个小时可能是时区理解错了,差 1000 倍通常是秒/毫秒搞混了。
听说有 2038 年问题,是真的吗?
2038 年 1 月 19 日,32 位有符号整数能表示的最大秒级时间戳会溢出。现在主流系统都已迁移到 64 位,日常使用不用担心。

相关教程

相关工具