今年的第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 章