什么是 Unix 时间戳?一文讲清原理与换算
时间戳的定义
Unix 时间戳(Unix Timestamp,也叫 Epoch Time 或 POSIX Time)是指从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)开始到某一时刻所经过的秒数。这个起始时刻被称为「Unix 纪元」(Unix Epoch)。
之所以选 1970 年 1 月 1 日,是因为早期 Unix 系统在设计时钟函数时需要一个人为约定的时间零点,而 1970 年恰好是 Unix 系统诞生的年代,取整方便且距离当时不远,这个约定随后被全球所有计算机系统沿用至今。
为什么时间戳不受时区影响
时间戳记录的是「从纪元起经过了多少秒」,它只描述一个绝对的物理时刻,不包含任何时区信息。无论你在北京、纽约还是伦敦,同一时刻的时间戳完全相同。只有当我们要把时间戳显示成人类可读的日期时间时,才需要加上时区进行换算。
以北京时间(UTC+8)为例:同一个时间戳 1784730000,换算成 UTC 是 2026 年 7 月 22 日 14:20:00,换算成北京时间则是 2026 年 7 月 22 日 22:20:00。秒数相同,只是显示的时间差了 8 个小时。本站的时间戳转换工具可以直接完成这种双向换算。
秒时间戳与毫秒时间戳
不同系统返回的时间戳精度不同,最常见的有两种:
- 秒级时间戳:10 位数字,如 1784730000,是标准 Unix 时间戳。
- 毫秒级时间戳:13 位数字,如 1784730000000,等于秒时间戳乘以 1000,JavaScript 的 Date.now() 返回的就是毫秒值。
区分两者的简单办法是看位数:10 位是秒,13 位是毫秒。换算时毫秒值除以 1000 即可得到秒值。
负时间戳是什么
时间戳也可以是负数,它表示 1970 年 1 月 1 日之前的时刻。例如时间戳 -1 对应 UTC 时间 1969 年 12 月 31 日 23:59:59。在处理历史日期(比如某位 1950 年代出生的人的生日)时,系统就会用到负时间戳。
常见应用场景
时间戳在软件开发中几乎无处不在:
- 数据库存储:记录订单创建时间、日志时间,存整数比存字符串省空间、好排序。
- 接口通信:API 签名常要求附带时间戳,用于防重放攻击。
- 缓存过期:判断缓存是否失效,直接比较当前时间戳与过期时间戳的大小。
- 跨时区协作:不同国家的人员用时间戳约定会议时刻,无需口头换算时区。
总结一下:Unix 时间戳本质上就是一个从 1970 年开始计数的秒数,它是全世界计算机统一的时间语言。需要快速查看当前时间戳或做转换时,可以直接使用时间戳转换工具。