消失的日期
2021-11-20

前两天看见 科普中国 公众号发布的一篇文章,大受震撼,长见识了!原来,历史上“消失了”一些日期。哈哈,和朋友 zhuangbility 的时候到了:为什么历史上会有消失的日期,这到底是自然选择还是集体被 “月读”;究竟是人性的扭曲,还是道德的沦丧。😄😄

时间和空间并不存在,这只是人们的一个幻觉。
阿尔伯特·爱因斯坦

以下是历史上“消失的”日期:

国家 “消失”的日期区间 “消失”天数
意大利、波兰、西班牙、葡萄牙 1582.10.5 - 1582.10.14 10
法国 1582.12.10 - 1582.12.19 10
比利时 1583.1.2 - 1583.1.11 10
丹麦、挪威、德国部分 1700.2.19 - 1700.2.28 10
英格兰、苏格兰、美国部分 1752.9.3 - 1752.9.13 11
瑞典 1753.2.18 - 1753.2.28 11
阿拉斯加 1867.10.6 - 1867.10.17 12
俄罗斯 1918.2.1 - 1918.2.13 13
希腊 1923.2.16 - 1923.2.28 13

一句话概括:以前不同历法周期不一致,后来逐渐大一统了,从旧历法切换到新历法的时候,就需要强制把旧历法的日期改成新历法的日期,中间可能会删除掉某些日子。比如,意大利、波兰、西班牙、葡萄牙国家从儒略历切换到格里历的时候,就删除了 1582/10/51582/10/14 共十天的日期。

学过编程算法的肯定都写过这样的代码:给定一个年份,判定其是否为闰年。

其实这便是现在通用的格里历的规则:

  1. 年份能够被 4 整除则为闰年;
  2. 特别的,世纪年(年份为整百数)必须要被 400 整除才设为闰年,否则设为平年。

即每 400 年当中只有 97 个闰年,平均每年 (365×303+366×97)/400=365.2425 日。

而在此之前的儒略历仅有第一点规则,平均每年 (365×3+366)/4=365.25 日。这就导致,儒略历对应的日期相比格里历是滞后的(每 133 年差一天)。所以,在历法从儒略历切换到格里历时,就要把滞后的日子直接从日历中删除。(就是这么简单粗暴)

如果你有心,翻看某些日历 APP,就会发现,它们会直接删除这些日期,比如:

  • iOS Calendar
  • Harmony OS

拓展一

历法一般分三种,阳历(以地球绕太阳公转纪年)、阴历(以月相阴晴圆缺纪月,一年十二个月)、阴阳历(前两者结合,即以月相阴晴圆缺纪月为基础,通过设置闰月来纪年)。所以,我们的农历属于阴阳历。

拓展二

为了调节日期,我们有了闰月;但是其实为了调节每一天当中的时间,我们还有闰秒机制。过去几十年,地球自转在变慢,所以,为了等待赶不上趟的地球自转,自 1972 年开始,我们人为增加了 1 秒。具体的操作就是在某一天(通常是 6/30 或 12/31)的 23:59:59 之后,增加 23:59:60,再到第二天的 00:00:00,或者在 23:59:58 之后,跳过 23:59:59 直接到第二天的 00:00:00

迄今为止,我们总共增加了 27 次闰秒,但是还没有发生减少闰秒的情况:

实施年份 6月30日 23:59:60 12月31日 23:59:60
1972年 +1秒 +1秒
1973年 —— +1秒
1974年 —— +1秒
1975年 —— +1秒
1976年 —— +1秒
1977年 —— +1秒
1978年 —— +1秒
1979年 —— +1秒
1981年 +1秒 ——
1982年 +1秒 ——
1983年 +1秒 ——
1985年 +1秒 ——
1987年 —— +1秒
1989年 —— +1秒
1990年 —— +1秒
1992年 +1秒 ——
1993年 +1秒 ——
1994年 +1秒 ——
1995年 —— +1秒
1997年 +1秒 ——
1998年 —— +1秒
2005年 —— +1秒
2008年 —— +1秒
2012年 +1秒 ——
2015年 +1秒 ——
2016年 —— +1秒

这个操作,对普通人基本没有影响,但是对很多科学计算或精密工程的影响则十分巨大。这也会给软件系统带来 bug(具体可自行去网上搜寻,个中苦楚,恐怕只有行业中的人士才能懂 😭)。所以,现在有些人建议不要搞闰秒了,直接搞闰时好了,这样不用隔几年就要闰一次,方便你我他。

拓展三

其实,在编程领域,另一个和时间打交道时经常遇到的问题便是时区。虽然初中便学过,但这里面的水,简直不要太深。有兴趣的小伙伴,请戳 这里,我就不赘述了。

这里仅记录经常被问的问题和我总结的答案:

  1. 总共有多少个时区?
    目前在使用的有 38 个(排除那些小众的,不被大多数人认可的时区,参考的是 这里。下同)
  2. 印度是东 4.5 区?
    是的,严格来说是 UTC +4:30 区,其他奇怪的时区还有 UTC -9:30UTC -3:30UTC +3:30UTC +5:30UTC +5:45UTC +6:30UTC +8:45UTC +9:30UTC +10:30UTC +13UTC +13:45UTC +14
  3. 最早时间和最晚时间相差多久?
    最早是 UTC +14 时间,最晚是 UTC -12 时间,所以前后相差 26 小时

拓展四

为了节约能源(减少碳排放),部分国家还设置了冬令时和夏令时。我们国家在上个世纪曾效仿苏联,短暂实施过几次夏令时(1986 年至 1991 年),后来取消了。

愚蠢的人类!
威震天

拓展五

以上这些紊乱的时间问题,导致我们在代码的世界中经常遇到莫名其妙的问题(bug issue / feature 😂)。且这些问题,在不同的环境(context)下可能表现得还不太一样。

比如,消失的天数,在 GoC#js 等编程语言中均体现不出来:

missing days in Go
missing days in C#
missing days in js

但是,夏令时却:

daylight in C#
daylight in js

什么鬼

参考链接

本文链接:
content_copy https://zxs66.github.io/2021/11/20/missing-days/