![Linux cal 命令未显示正确的输出](https://linux22.com/image/1322944/Linux%20cal%20%E5%91%BD%E4%BB%A4%E6%9C%AA%E6%98%BE%E7%A4%BA%E6%AD%A3%E7%A1%AE%E7%9A%84%E8%BE%93%E5%87%BA.png)
如果你cal 9 1752
在 Linux 终端中输入,你会看到奇怪的输出。例如:
[max@avi ~]$ cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
您是否注意到 3 到 13 的日期缺失了?为什么会这样?我使用的是 CentOS 6.2。
答案1
这没有问题,1752 年 9 月就跳过了这些日期。
英国和大英帝国(包括现在的美国东部)于 1752 年采用公历,此时必须将日期调快 11 天。1752 年 9 月 2 日星期三之后是 1752 年 9 月 14 日星期四。
答案2
最初在旧版本 7 机器上编写“cal”命令的人的代码中有一个偏差一的错误。当 malloc 变量用零覆盖 12 个额外字节时,这会导致一些错误输出,从而导致上面看到的奇怪的日历输出。
现在,没有一个心智健全的人会真正关心 1752 年 9 月的日历。甚至主意在 UNIX 下不存在 1752 年的版本,因为 UNIX 直到 1970 年初才开始计时。因此,直到很晚才有人知道“cal”有这个错误。那时已经有成千上万份“cal”的副本在流传,其中许多都是二进制的。修复它们已经太迟了。
因此,在 1975 年中期,一些 AT&T 高层官员与教皇会面,并达成了协议。日历被追溯更改,以使 1752 年 9 月与 UNIX 现实保持一致。由于日历是通过计算来更改的向后从 1752 年 9 月 14 日起,此后的日期均不受影响。此前的日期均被推迟了 12 天。他们还修复了“cal”的手册页,以将该错误记录为一项功能。
从9月3日至9月13日这11天,根本就没有被记录下来,他们翻遍了史书,幸好这11天里,没有发生什么重大事件。
总的来说,这整个事件几乎算不上什么大事。后来有一位科幻小说作家听说了这件事,并把这件事写成了一本长篇科幻小说,名为《天堂的车床》,在我看来,这本书与真实发生的事情几乎没有什么相似之处。