Hello 天文

今年的第60天,到底是2月29日还是3月1日?

日期、星期和一年里的序号,都是同一天的不同标签。

时间与历法

安排连续观测计划时,你可能会说“从年初开始第60天”。但平年和闰年不同,公历和儒略历的闰年规则也不同。把规则写清楚,就能在日期和序号之间来回转换。

打开互动课程 →

先猜一下

所有年份的第60天都是3月1日吗?

查看答案与解释

不是,闰年可能是2月29日 — 闰年二月多一天,之后的日序对应关系会移动。

再把体验和科学连起来

从1月1日开始数第1天

日序不是0起算的程序下标。1月31日是第31天,后面再接二月。

N从1开始

先决定这一年是不是闰年

公历百年通常不闰,除非能被400整除;儒略历按每4年一闰处理。

不同历法的年长可能不同

月日和序号可以互相查

先用年月日算N,再按同一历法反算月日,应回到原位置。

Pouplier公式把N变回M与D

星期走自己的连续循环

星期由连续日数的七日循环求得,不能仅凭每月第几日猜测。

星期 = floor(JD+1.5) mod 7

N是该历法年内从1开始的序号。先确认平/闰年,再由月份累计或反算月日;星期公式的模7结果按本课映射为星期名,不能把0一律理解成周一。

试一试

比较2023和2024的第60天,再试1900:它在公历是平年,在儒略历却是闰年。

动手看一遍 →

符号不用背

N
从1月1日开始计为1的年内日序
K
闰年取1,平年取2
weekday
JD+1.5取整后的7日循环余数

算法、精度与适用范围

实现第7章印刷页65–66的星期求法、年内日序公式及Pouplier逆向月日算法。公历与儒略历的闰年规则分别处理;本课不混入1582改历跳日,历史混合历法请用日期/JD课。年内序号从1开始,不是零基数组。逆算法对平年366或非法日期明确返回不可用;星期通过连续JD计算,不因选择月日展示模式而改变。采用多世纪每个有效日的日序互逆与独立JD差校验,不把几张日历截图当算法证据。

我的理解检查

一年中的第1天是?

1月1日 — 本课日序从1而不是0开始。

1900在公历与儒略历里一定同为闰年吗?

不是,两套规则不同 — 公历1900不闰,儒略历1900闰。

平年输入第366天,应如何处理?

明确提示本年没有这一天 — 不能把非法年内日序偷偷改成另一年。

先判断历法与闰年,再把“第几天”翻回月日;星期则沿连续时间每七天循环。

Jean Meeus · Astronomical Algorithms, 2nd ed. · 第 7 章

时间与历法 · 全部互动课程