🕐

Linux 时间戳转换器 常见问题

Q: 什么是 Unix 时间戳?

A: Unix 时间戳(也称为 POSIX 时间或 epoch 时间)是自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数,不包含闰秒。它是一个简单的整数,无论时区如何,在全球范围内都代表同一个时刻。

Q: 如何将 Unix 时间戳转换为人类可读的日期?

A: 你可以通过以下几种方式转换 Unix 时间戳:

  • 在线工具:使用我们的 Unix 时间戳转换器 进行即时转换
  • Linux 终端:运行 date -d @1785292800(在 GNU Linux 上)或 date -r 1785292800(在 macOS 上)
  • JavaScriptnew Date(timestamp * 1000).toISOString()
  • Pythondatetime.utcfromtimestamp(1785292800)
  • PHPdate("Y-m-d H:i:s", 1785292800)

Q: 秒级和毫秒级时间戳有什么区别?

A: 秒级时间戳是 10 位数字(例如 1785292800)。毫秒级时间戳是 13 位数字(例如 1785292800000),因为它将秒值乘以 1000。JavaScript 的 Date.now() 返回毫秒,而大多数其他系统和 API 使用秒。不小心混用它们会产生严重错误的日期——在需要秒的地方使用毫秒,得到的日期大约在未来 56,000 年。

在转换之前,始终检查数据源的分辨率。不确定时,数一数位数:10 位 = 秒,13 位 = 毫秒。

Q: Unix 时间戳能否表示 1970 年之前的日期?

A: 可以。1970 年 1 月 1 日之前的日期以负数表示。例如,时间戳 -3600 对应 1969 年 12 月 31 日 23:00:00 UTC。并非所有转换工具都能正确处理负数时间戳,但我们的在线转换器可以。各种编程语言也都普遍支持它们。

Q: 什么是 2038 年问题?

A: 2038 年问题(也称为 Y2K38)是一个影响以 32 位有符号整数存储时间戳的系统的日期表示问题。最大值为 2147483647,对应 2038 年 1 月 19 日 03:14:07 UTC。一秒钟后,该值溢出为 -2147483648,被解释为 1901 年 12 月 13 日。

大多数现代 64 位系统不受影响,但嵌入式设备、旧版数据库和一些 32 位系统仍然存在隐患。解决方法是将时间表示迁移到 64 位,其可表示范围约为 2920 亿年。

Q: Unix 时间戳是否包含闰秒?

A: 不包含。Unix 时间戳有意忽略闰秒。即使 UTC 中增加了一秒闰秒,每一天也被视为恰好 86,400 秒。在插入闰秒期间,Unix 时间戳一秒内不会前进,实际上相当于跳过了闰秒。这意味着 Unix 时间戳与原子时的偏差在缓慢但持续地累积(目前约为 27 秒)。

Q: 转换 Unix 时间戳时如何处理时区?

A: Unix 时间戳在任何地方都代表同一个时刻。只有在将其显示为人类可读日期时,时区才重要。始终以原始整数形式存储时间戳,并且仅在显示时转换为本地时间。请使用 IANA 时区名称(如 America/New_York),而不要使用 EST 或 PST 等缩写,因为缩写不考虑夏令时。我们的 Unix 时间戳转换器 会同时显示多个时区的结果。

Q: Unix 时间戳的最大值是多少?

A: 最大值取决于用于存储的整数大小:

  • 32 位有符号整数2147483647(2038 年 1 月 19 日 03:14:07 UTC)
  • 32 位无符号整数4294967295(2106 年 2 月 7 日 06:28:15 UTC)
  • 64 位有符号整数9223372036854775807(从现在起约 2920 亿年)

大多数现代系统使用 64 位整数,可表示范围实际上接近无限。在数据库列或数据结构中,通常将时间戳存储为 64 位类型(SQL 中的 BIGINT),这种做法面向未来、足够稳妥。

Linux 时间戳转换器 常见问题 - 常见问题解答 - CoolTool