什么是 Unix 时间戳?Epoch 时间的完整说明
快速解答
Unix 时间戳是自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来的秒数。它与时区无关并且易于比较。 JavaScript 使用毫秒(13 位数字); Unix 和大多数 APIs 使用秒(10 位数字)。使用我们免费的时间戳转换器在时间戳和人类可读日期之间进行转换。
介绍
Unix 时间戳(也称为 Unix 纪元时间、POSIX 时间或 Unix 时间)是自 1970 年 1 月 1 日 00:00:00 UTC(称为 Unix 纪元的时刻)以来经过的秒数。时间戳广泛应用于操作系统、数据库、日志和 APIs 中,因为它们与时区无关(始终为 UTC)、易于比较(简单整数比较)且紧凑。然而,它们不是人类可读的——如果不进行转换,1693526400 就毫无意义。本指南解释了什么是时间戳以及如何使用它们。
步步
-
了解 Unix 纪元
Unix 纪元是 1970 年 1 月 1 日 00:00:00 协调世界时 (UTC)。 Unix 时间戳是从此时开始的秒数。正时间戳位于纪元之后;负时间戳(某些系统支持)位于其之前。
-
区分秒和毫秒
Unix 时间戳通常以秒为单位(截至 2026 年为 10 位数字,例如 1693526400)。 JavaScript 的 Date.now() 和 Date.getTime() 返回毫秒(13 位数字,例如 1693526400000)。始终检查 API 需要哪个单位 - 混合它们是最常见的时间戳错误。
-
了解时区独立性
Unix 时间戳始终为 UTC。它们不依赖于用户的时区。要显示特定时区的时间戳,请将其转换为日期并应用时区偏移量。这使得时间戳非常适合存储和比较。
-
了解 2038 年问题
使用 32 位有符号整数作为时间戳的系统将在 UTC 时间 2038 年 1 月 19 日 03:14:07 发生溢出,即“Y2038 问题”。使用 64 位整数或 JavaScript 数字(64 位浮点数)的系统不受影响。现代系统在很大程度上是 2038 年安全的,但传统嵌入式系统可能不是。
示例
已知日期的时间戳
输入: 2023-09-01 00:00:00 世界标准时间
输出: 1693526400(秒)或 1693526400000(毫秒)
Unix时代
输入: 1970-01-01 00:00:00 世界标准时间
输出: 0
Y2038问题边界
输入: 2038-01-19 03:14:07 世界标准时间
输出: 2147483647(最大 32 位有符号整数)
常见问题
- 混合秒和毫秒——JavaScript 使用毫秒 (Date.now()),Unix 和大多数 APIs 使用秒。除以 1000 将毫秒转换为秒;乘以 1000 则相反。
- 时区混乱——时间戳是 UTC。显示时,转换为用户本地时区或指定UTC。不要对原始时间戳应用偏移量。
- 2038 年问题 — 32 位有符号整数时间戳在 2038 年 1 月 19 日溢出。使用 64 位整数或 JavaScript 数字可以避免这种情况。
- 负时间戳 — 1970 年 1 月 1 日之前的日期具有负时间戳。有些系统不支持它们。
提示
- 始终检查 API 是否需要秒或毫秒——这是最常见的时间戳错误。
- 在 APIs 中使用 ISO 8601 字符串(例如“2023-09-01T00:00:00Z”)作为人类可读的时间戳;使用Unix纪元进行存储和计算。
- JavaScript Date.now() 返回毫秒;除以 1000 并向下取整即可得到秒数。
- 使用我们的时间戳转换器在浏览器中的时间戳和人类可读日期之间进行转换。