Linux cal 命令未显示正确的输出

Linux cal 命令未显示正确的输出

如果你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 日星期四。

参考:http://en.wikipedia.org/wiki/Gregorian_calendar

答案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天里,没有发生什么重大事件。

总的来说,这整个事件几乎算不上什么大事。后来有一位科幻小说作家听说了这件事,并把这件事写成了一本长篇科幻小说,名为《天堂的车床》,在我看来,这本书与真实发生的事情几乎没有什么相似之处。

原始来源

相关内容