我想检查当我更改计算机日期时某个软件会如何反应。但我无法将系统时间更改为 1970 年以下的任何时间。这是为什么?
答案1
UNIX 和POSIX兼容系统将系统时间(“Unix 时间”)编码为自 1970 年 1 月 1 日 00:00:00 Unix 纪元开始以来经过的秒数世界标准时间,闰秒除外不计算在内。这个限制是从 UNIX 继承而来的。32 位值意味着,为了获得合理的精度,零日必须非常接近,这样就无法回溯到公元 0 年,或者更合理地说,5780 年和变化,因为此答案的日期是 5780 年 10 月 10 日{G}。
答案2
从维基百科:
Unix 时间(也称为纪元时间、POSIX 时间、纪元以来的秒数或 UNIX 纪元时间)是一种描述时间点的系统。它是自 Unix 纪元(即 1970 年 1 月 1 日 00:00:00 UTC 时间)以来经过的秒数,减去闰秒。
还一个解释:
Linux 遵循 Unix 设定的传统,以秒为单位计算时间,从其正式“生日”开始——用计算术语来说称为“纪元”——即 1970 年 1 月 1 日。
更完整的解释可以参见这篇《连线新闻》文章。它解释说,早期的 Unix 工程师任意选择了这个日期,因为他们需要为时间的开始设定一个统一的日期,而 1970 年元旦似乎最为方便。
答案3
在 UNIX(和 Linux)系统上,时间计数器被解释为(毫秒)秒的无符号值,零定义为 1970-01-01T00:00:00.000 UTC。如果您想将系统时间设置为该时间之前的任意日期/时间,则必须将该计数器设置为负值 - 这对于无符号值不起作用(因为它是无符号的……)。
关于 UNIX 的创建者为何选择该时间点作为“纪元的开始”,有几种解释,我不知道哪种解释是正确的。但他们选择 1970 年就是您无法将系统设置为更早时间的原因。