什么是Unix时间戳?

Unix时间戳(Unix Timestamp)是从1970年1月1日00:00:00 UTC到指定时间的总秒数,也称为Epoch时间或POSIX时间。这个起点被称为"Unix纪元"(Unix Epoch)。时间戳是一个整数,不受时区影响——同一时刻,全球所有计算机上的时间戳都是相同的。

秒级 vs 毫秒级

这是开发者最容易混淆的时间戳格式。Unix时间戳原始定义为秒级(10位数字,如1716124800),但许多编程语言和系统使用毫秒级(13位数字,如1716124800000)。JavaScript的Date.now()返回毫秒,Python的time.time()返回秒(浮点数),Java的System.currentTimeMillis()返回毫秒。在数据库中,MySQL的UNIX_TIMESTAMP()返回秒,MongoDB的Date对象使用毫秒。

一个简单的判断规则:10位数字是秒级,13位数字是毫秒级。如果你的API返回了10位时间戳但前端需要13位,乘以1000即可。

2038年问题

32位有符号整数最大值为2147483647,对应的时间是2038年1月19日03:14:07 UTC。到这个时刻,使用32位整数存储时间戳的系统将会溢出,回到1901年。这被称为"2038年问题"(Y2K38)。解决方案是使用64位整数存储时间戳,大多数现代系统已经做了这个迁移。

时区处理最佳实践

时间处理的黄金法则:存储用UTC,显示用本地时间。在数据库中始终存储UTC时间或时间戳,在展示层根据用户时区转换。避免在代码中硬编码时区偏移量(如+8),因为夏令时会导致偏移量变化。使用IANA时区标识(如Asia/Shanghai)而不是简单的偏移量。

常见的时间处理陷阱

月份从0开始(JavaScript的Date.getMonth()返回0-11);日期对象是可变的(修改一个Date会影响所有引用);夏令时转换时某些时间不存在或重复;闰秒导致时间不连续(UTC通过闰秒调整,但Unix时间戳通常忽略闰秒)。

工具推荐

使用我们的在线时间戳转换工具,支持Unix时间戳与日期时间互转,实时显示当前时间戳,支持秒级和毫秒级转换,一键复制结果。