Unix 时间戳转换
在 Unix 时间戳和可读日期之间转换。支持秒和毫秒精度。
使用方法
- 输入 Unix 时间戳以转换为可读日期
- 或选择日期和时间以转换为 Unix 时间戳
- 在秒和毫秒格式之间切换
常见问题
-
什么是 Unix 时间戳?
Unix 时间戳是从 1970 年 1 月 1 日(UTC)以来经过的秒数,也称为 Unix 纪元。它在编程和数据库中广泛使用。
-
秒和毫秒时间戳有什么区别?
秒级 Unix 时间戳为 10 位数字(如 1700000000),毫秒级为 13 位数字(如 1700000000000)。JavaScript 使用毫秒,而大多数 Unix 系统使用秒。
-
什么是 Y2K38 问题?
32 位系统将时间戳存储为有符号 32 位整数,将在 2038 年 1 月 19 日溢出。现代 64 位系统不存在此限制。
-
此工具考虑时区吗?
此工具同时显示 UTC 和您本地时区的时间,方便对比。
Unix 时间戳是什么?
Unix 时间戳(Unix Timestamp)是一种表示时间点的整数,定义为从 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。这个起点被称为"Unix 纪元"(Unix Epoch)。
为什么选 1970 年?这与 Unix 操作系统的诞生时间有关——当时的工程师选择了一个便于计算机表示的近期整数起点。今天,Unix 时间戳已经成为跨平台、跨语言的通用时间标准,数据库存储、日志记录、API 接口中随处可见。
秒与毫秒:一个常见陷阱
Unix 时间戳有两种精度,开发者必须区分清楚:
- 秒级时间戳:10 位数字,例如
1700000000(对应 2023 年 11 月某天) - 毫秒级时间戳:13 位数字,例如
1700000000000
JavaScript 的 Date.now() 返回毫秒级时间戳,而 Python 的 time.time()、大多数 Unix 命令行工具以及数据库(MySQL 的 UNIX_TIMESTAMP 函数)默认使用秒级。两者混用是常见的 bug 来源——把毫秒级时间戳当作秒级使用,日期会显示为 2525 年,反之则显示为 1970 年 1 月 1 日附近。
2038 年问题
早期的 32 位 Unix 系统使用一个有符号的 32 位整数存储时间戳,其最大值为 2^31 - 1 = 2147483647,对应的日期是 2038 年 1 月 19 日 03:14:07 UTC。超过这一时刻,32 位整数溢出,时钟会"归零"回到 1901 年,引发系统错误。
这与 2000 年的千年虫问题类似,被称为 Y2K38 问题。现代 64 位系统不受此影响——64 位时间戳能表示到大约 2920 亿年后。但一些嵌入式设备、老旧数据库字段和遗留系统仍可能存在风险。
时间戳的实际应用
- 日志记录:服务器日志使用时间戳而非格式化日期,便于排序和计算时间差
- 缓存控制:HTTP 响应头用时间戳标记资源的最后修改时间(
Last-Modified) - 数据库存储:将时间存为整数比字符串更节省空间,索引性能更好
- 跨时区协作:时间戳本身不包含时区信息,是处理全球分布式系统时间的最可靠方式