什么是 Unix 时间?
Unix 时间(也称为纪元时间、POSIX 时间或 Unix 时间戳)是一种描述时间点的系统。它是自 Unix 纪元(定义为1970年1月1日星期四UTC 00:00:00)以来经过的秒数。它在类 Unix 操作系统和许多其他计算系统中被广泛使用。
Unix 时间的主要优点是其简单性。它以一个单一、被普遍理解的整数表示时间,并持续递增。这使得存储、比较和进行时间戳计算变得非常容易,无需担心时区、夏令时或不同的日历系统。例如,要计算两个事件之间的持续时间,只需相减它们的 Unix 时间戳。
虽然这个原始数字非常适合计算机,但对人类来说并不太友好。为了弥合这一差距,开发者和技术爱好者使用一种叫做 纪元转换器 的工具。你可以用它立即将任何时间戳转换成人类可读的日期,或反向操作,找到特定日期的时间戳。
2038 年问题
与 Unix 时间相关的一个著名问题是“2038 年问题”。它类似于 Y2K 问题。许多早期计算机系统被设计为将 Unix 时间戳存储为 32 位有符号整数。一个有符号的 32 位整数可以表示的范围是从 -2,147,483,648 到 2,147,483,647。
最大值 2,147,483,647 将在2038年1月19日UTC 03:14:07达到。下一秒,整数将溢出并回绕到其最小值,这个值会被系统解释为1901年的日期。这可能导致依赖于 32 位时间表示的遗留软件出现广泛故障。
解决方案是使用64 位整数来存储时间戳。64 位整数的最大值如此之大,大约可以持续 2920 亿年,不会溢出,从而有效解决了未来可预见的问题。大多数现代操作系统和软件已经过渡到 64 位时间表示。
闰秒与 Unix 时间
一个重要的技术细节是,Unix 时间不考虑闰秒。虽然 UTC(协调世界时)偶尔会添加闰秒以保持我们的时钟与地球自转同步,但 Unix 时间戳会忽略它们,继续线性计数。
这意味着 Unix 时间并不是真正的 UTC 表示。更准确地说,它是秒的线性计数。当发生闰秒时,Unix 时间有时会重复一秒以保持同步。这一细节对于科学和高精度应用至关重要,但对于大多数通用计算来说,差异可以忽略不计。
Unix 时间的常见用途
- 文件时间戳: 操作系统使用 Unix 时间戳来跟踪文件的创建、修改或最后访问时间。
-
数据库:
存储记录的日期和时间信息的常用且高效的方法(例如
created_at、updated_at)。 - API 和网页开发: 用于会话过期、缓存控制和 API 请求的日志记录。
- 编程: 几乎所有编程语言都提供获取当前 Unix 时间戳以及将其转换为人类可读日期格式的函数。