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