Leetcode 1185/1154. 一周/一年中的第几天

(1 min to read)

题意

给定年月日,求这是一周中的星期几,以及这是一年中的第几天。

做法

关键就是闰年这个特殊情况,闰年的一天有366天(2月会有29天)。

  • 普通闰年:4的倍数,且不是100的倍数
  • 世纪闰年:400的倍数

蔡勒公式,知道即可,不用记忆。

公元1年1月1日被定义为星期一,所以只需要算距离该日的天数即可知道是星期几。

不过事实上那天采用的是儒略历,而不是现在的格里历(公历),在格里历中1582年10月5日到1582年10月14日这10天是消失的(为了调整之前4年1润的误差),此外儒略历与格里历在闰年上的差异(多了12天),综合这些差异,儒略历会比格里历在当时多2天,因此1年1月1日在儒略历上是星期六。

补充知识

实际公转时间其实是365.25日,所以需要通过闰年来补足缺少的天数。

四年一闰,百年不闰,四百年再闰。(每四年少一天,所以要补足;补完后,每一百年又多一天,所以不补)

最初计算机系统只有32位,只能存储68年,UNIX选择了1970.01.01作为纪元时间。又由于UNIX的统治地位,该选择成为了POSIX标准。