到底3200年是不是一个闰年?
到底3200年是不是一个闰年?https://www.bilibili.com/video/BV1zs4y1r7R2/
缘起
关于这个问题的探讨丫,主要是源于一道课后作业题~
小甲鱼很多年前出过一道题,就是让大家编写一段代码,计算输入的年份是不是一个闰年。
那么我们也给出了闰年的计算规则:
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。
闰年分为普通闰年和世纪闰年。
公历年份是 4 的倍数的,且不是 100 的倍数,为普通闰年(如 2020 年就是闰年);
公历年份是整百数的,必须是 400 的倍数才是世纪闰年(如 2020 年不是世纪闰年,2000 年是世纪闰年)
关于这个规则,小甲鱼下面会有详细的解释,一定要看到最后哦~
但是有鱼油提出了这么一个问题:公元 3200 年是平年,不是闰年,这个算法不对!!
好家伙,反复被打过脸的小甲鱼慌了!!!
{:10_296:}
这下连小学毕业证书也要不保了吗?
于是,有了下面的故事……
求证
遇事不决,先问百度?
度娘说是~
也许有鱼油觉得光问度娘是不靠谱的,同样的问题我们可以再问问谷歌:
这哥俩的推荐答案又不一致了,谷歌说 3200 年没有 29 号,所以不是闰年!
我不信!
{:10_272:}
然后我又翻了半天手机的日历,发现:
3200 年的 2月份是有 29 天的,是闰年~
甚至说,我使用 Python 的 calendar 模块,它也告诉我们,3200 年应该是一个闰年才对:
>>> import calendar
>>> calendar.isleap(3200)
True
这就完事了?
谷歌这次真的错了吗?
不!
{:10_307:}
无风不起浪,让我们继续探寻真相,于是我在维基百科看到:
原来是约翰·赫歇尔男爵搞的鬼……
这里面提到的 “格里高利历” 是啥?
太阳年又是什么?
揭秘
太阳年就是地球绕着太阳公转一圈所耗费的时间。
通常我们认为这个时间是 365 天,也就是一年,但其实较真地计算,这后面是小数点的:
https://fishc.oss-cn-hangzhou.aliyuncs.com/Videos/Math/EarthOrbit.mp4
1 太阳年 = 365.2421990741 天 = 365 天 5 小时 48 分 46 秒
小数点后的数虽然不大,但日积月累,就会出问题!
你看,如果我们为了方便,一年按 365 天去算,那么每年就会多出来大概 5.8 个小时左右的时间,
那么经过 744.8 年之后,我们就能感受到真正意义上的六月飞霜及腊月酷暑,
因为我们的夏天变成了十二月,而冬天变成了六月……
国庆变成了春节,圣诞老人上班恐怕就要穿着短裤 + 背心了
而闰年,正是为了解决这个问题才被发明出来的。
{:10_335:}
儒略历
“儒略历” 是 “格里高利历” 的前身,在公元前 45 年 1 月 1 日起开始执行,推行此历法的正是恺撒大帝本人。
儒略历规定了:
[*]一年设 12 个月,大小月交替(大月 31 天,小月 30 天),
[*]四年一闰,平年 365 日,闰年于二月底增加 1 闰日
四年一闰就是这么来的~
这样我们掐指一算,不难得出年平均长度就是:
(365 + 365 + 365 + 366) / 4 = 365.25 天
其实已经非常接近太阳年了~
不过,随着时间尺度地不断放大,
人类薪火相传生生不息,很快人们就发现,
如果使用儒略历,那么每个世纪(100 年)将会与太阳年的偏差达到将近一天((365.25 - 365.2421990741) * 100 ≈ 0.78 天 =18.72 小时)
没错,儒略历的闰年计算方式,有些矫枉过正了!!
格里高利历
大家如果感兴趣,可以将手机的日历软件翻到 1582 年的 10 月份。
因为在这个月里,发生了一件大事:
没错,这个月竟然少了 10 天!
{:10_328:}
是的,因为儒略历的偏差随着时间被放大,虽然期间经过多次调准,但仍然在 16 世纪偏差达到了十天之多,
所以当时的罗马教皇格列高利十三大手一挥,将 1582 年 10 月 5 日 ~ 14 日这十天给抹掉,同时批准颁行格里高利历。
格里高利历也称为公历,它对儒略历的闰年计算方式进行了改进:
每一个可以被 4 整除的年份都是闰年,但可以被 100 整除的年份,必须也能被 400 整除才是闰年。
因此,1700 年、1800 年、和 1900 年都不是闰年,而 2000 年是世纪闰年。
这样的话,格里高利历每 400 年里仅有 97 个闰年,比儒略历少了 3 个。
所以,格里高利历的年平均长度为 365.2425 天((97 * 366 + 303 * 365) / 4),更接近平均太阳年 365.2421990741 天。
不过,就算是精确到了小数点后第 4 位,但误差仍然是误差,
只要人类折腾的足够久,那么历法仍然需要被继续修正!
不过到目前为止,我们仍然采用的是格里高利历,所以我们无论是翻日历,还是使用 Python 的 calendar 模块,
得到的结果仍然说 3200 年是一个闰年,是否将该年份定为平年,仍然是有待商榷的,并未真正的纳入规则。
毕竟需要考虑到地球公转速度这类不稳定的因素,未来的难题就留给未来的人类吧……
好了,花开两朵,各表一枝,现在我们假设不稳定因素不存在,未来人类可以无限繁衍下去,
那么闰年的规则应该如何调整呢?
答案是:
能够被 4 整除但不能被 100 整除的是闰年;
能够被 100 整除但不能被 400 整除的是平年;
能够被 400 整除但不能被 3200 整除的是闰年;
能够被 3200 整除但不能被 86400 整除的是平年……
那么,你知道这是怎么算出来的吗?
仔细思考一下,回复 “朕想知道”,小甲鱼就告诉你答案!
**** Hidden Message *****
搞不好,将来的历史上,都没有这个纪元年
没准那个时候小甲鱼统治地球早就换了历法 长知识了 所以到底是什么年? liuhongrun2022 发表于 2023-6-19 20:51
所以到底是什么年?
按照现行的格里高利历法是闰年,因为目前似乎还没有制定新的标准 一个头两个大,未来的难题就留给未来的人类吧{:10_282:} {:10_256:}{:10_256:}{:10_256:}论适者生存 初中学的太阳年恒星年 鱼小二 发表于 2023-6-21 04:29
一个头两个大,未来的难题就留给未来的人类吧
未来的难题就留给未来的人类吧 虽然接触Python到现在没几天,但是越看越觉得自己弱爆了,,,之前跟白活了一样。哈哈哈{:10_269:} 听的一头雾水,还是先学习吧 还没学这个代码看不懂看不懂 所以3200年应该算闰年还是平年呢? 感觉好复杂呀! 本帖最后由 clollipops 于 2023-7-25 18:29 编辑
涨知识 好 zc 哦哦哦哦哦{:10_256:} 原来平年闰年还有这么多故事这么复杂的呢,涨知识了~ 看的我一头雾水,好难