Tool House

Unix 时间戳:秒级和毫秒级怎么区分

分类:开发技巧 作者:admin 更新:2026-10-03T13:54:32

10 位是秒、13 位是毫秒,这个判断法能应付 99% 的情况,但还有两个例外要小心:微秒时间戳和时区偏移。附赠一个一眼看穿的方法。

Unix 时间戳是「从 1970-01-01 00:00:00 UTC 起经过的秒数」。它本身没有单位,是各语言的实现约定造成了混乱。

一眼区分的办法:数位数

当前时间(2026 年)对应的时间戳:

  • 秒级:1790 开头,10 位
  • 毫秒级:1790 开头,13 位
  • 微秒级:16 位
  • 纳秒级:19 位

所以拿到一个数字,先看位数:

1790000000        → 秒   (2026 年某个时刻)
1790000000000     → 毫秒
1790000000000000  → 微秒

位数不符时,可以直接用时间戳转换工具试——工具会同时给出秒级与毫秒级的解析结果,哪个是合理日期一目了然。

各语言默认用哪个

  • JavaScript:Date.now() 返回毫秒。这是最容易出错的一处,因为很多后端接口给的是秒。
  • Java:System.currentTimeMillis() 毫秒;Instant.getEpochSecond() 秒。
  • Python:time.time() 返回浮点秒(带小数,既是秒又有亚秒精度)。
  • Go:time.Now().Unix() 秒;UnixMilli() 毫秒。
  • MySQL:UNIX_TIMESTAMP() 秒。

跨语言传时间戳时,约定单位比约定格式更重要。建议接口文档明确写「秒级整数」,或直接传 ISO 8601 字符串。

两个容易忽略的坑

一是 2038 问题。 32 位有符号整数最大能表示到 2038-01-19 03:14:07 UTC。老系统用 32 位存秒级时间戳,到点会溢出成 1901 年。现在新建系统请用 64 位整数。

二是时区。 时间戳本身是 UTC,不带时区信息——这恰恰是它的优点。但把时间戳转成日期字符串时就必须指定时区,否则同一时间戳在不同服务器上会显示成不同的小时数。前端展示时注意用本地时区,后端存储与日志统一用 UTC。

Python 的浮点秒怎么处理

time.time() 返回 1790000000.123,小数部分就是毫秒精度。要转成毫秒整数:

import time
ts_ms = int(time.time() * 1000)

注意先乘再取整,反过来(先取整再乘)会丢掉亚秒精度。

← 返回知识库 回到首页