我有点担心这个。这就是所谓的“2038年问题”。从 12.04 开始,Linux 内核或 Ubuntu 是否已准备好处理此后的日期?
Rad*_*anu 14
不,它不会失败。在最坏的情况下,从程序员的角度来看,它将按预期工作:将重置为日期 1901-12-13 20:45:52:

以防万一,在这种情况发生之前,您不会更新当前的发行版。“更新很容易。其中一个更新肯定会包含修复程序。 ”就像chocobai说的那样。
我记得在 2000 年之前的 16 位机器上是同样的问题/问题,最后它没有任何问题。
来自维基百科的解决方案:
大多数设计为在 64 位硬件上运行的操作系统已经使用有符号的 64 位
time_t整数。使用带符号的 64 位值引入了一个新的环绕日期,该日期比估计的宇宙年龄大 20 多倍:从现在开始大约 2920 亿年,即 292,277,026,596 日(星期日)15:30:08。对日期进行计算的能力受到以下事实的限制tm_year使用从 1900 年开始的有符号 32 位 int 值。这将年份限制为最大值 2,147,485,547 (2,147,483,647 + 1900)。虽然这解决了执行程序的问题,但并没有解决在二进制数据文件中存储日期值的问题,其中许多采用严格的存储格式。它也无法解决在兼容层下运行的 32 位程序的问题,并且可能无法解决将时间值错误地存储在time_t.
我在 64 位上使用 Ubuntu 13.04,出于好奇,我手动将时间更改为 2038-01-19 03:13:00。03:14:08 之后什么也没发生:

所以这个问题没什么好担心的。
更多关于:
小智 7
您可以使用以下 Perl 脚本检查计算机的时间是否会崩溃:
#!/usr/bin/perl
use POSIX;
$ENV{'TZ'} = "GMT";
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
print ctime($clock);
}
Run Code Online (Sandbox Code Playgroud)
如果你的电脑没问题,你会得到这个:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038 <-- Last second in 32-bit Unix systems
Tue Jan 19 03:14:08 2038
Tue Jan 19 03:14:09 2038
Tue Jan 19 03:14:10 2038
Run Code Online (Sandbox Code Playgroud)
如果你的电脑和我的一样,它会像这样环绕:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Run Code Online (Sandbox Code Playgroud)
它也可以这样做:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27212 次 |
| 最近记录: |