Hello 天文

自動翻譯,請以簡體中文原文校核。

一個古老的觀測日期,換成連續日數會不會弄錯?

同樣的年月日,曆法不同就可能不是同一天;先選規則,再雙向核對。

時間與曆法

歷史記錄寫著一個日期,現代程式卻需要JD。除了年月日,也要知道它用公曆還是儒略曆,是否跨過當地改曆,以及“公元前”的年號怎樣輸入。轉換不是直接套一張今天的行事曆。

開啟互動課程 →

先猜一下

知道「1582年10月10日」這幾個字,就能確定它一定是哪一天嗎?

查看答案與解釋

還要知道曆法與地區規則 — 延伸公曆/儒略曆可有這個標籤,而某些1582混合改曆規則跳過了它。

再把體驗和科學連結起來

先把曆法寫在日期旁邊

同一個年月日字串,在公曆和儒略曆裡不一定是同一天。程序先明確規則,拒絕不存在的日期。

日期 + 曆法 → 唯一的連續日數

用連續日數跨過改歷

羅馬規則中10月4日之後接10月15日,日期標籤跳了十個數,但時間只過一天。

1582-10-04 → JD2299159.5;隔日JD2299160.5

把JD再變回日曆

逆向演算法先加0.5,以午夜作為拆整數日和日內小數的邊界,再求出年月日。

Z=floor(JD+0.5),F為餘下小數

負年和MJD也要說明意義

天文年有0年;MJD只是把JD減掉2400000.5,起點不同,描述的時間並沒有改變。

MJD = JD − 2400000.5

把計算鏈展開

若 M≤2:Y←Y−1,M←M+12 A = floor(Y/100) B公曆 = 2 − A + floor(A/4);B儒略曆 = 0 JD = floor(365.25(Y+4716)) + floor(30.6001(M+1)) + D + B − 1524.5

D包含日內小數。 floor是向負無窮取整,不能替換成截去小數;先選擇曆法,再計算修正B。

試一試

展開日期輸入後可改年月日。先比較1582改歷前後,再用「從JD查日期」回查;兩次轉換應指向同一天。

動手看一遍 →

符號不用背

JD / MJD
連續日數 / JD−2400000.5
天文年0
對應歷史紀年的西元前1年
延伸曆法
把同一算術規則向過去或未來延伸,不等於當地歷史採用
羅馬改歷規則
1582-10-04之後接1582-10-15的特定混合規則

演算法、精確度與適用範圍

補第7章日期到JD、JD回日期、天文負年、曆法選取與MJD。正向復用已驗證Astro.jd,先獨立驗證月長閏年;逆向採用印刷頁63的Z/F及A/B/C/D/E整數步驟,依明確模式選擇公曆或儒略曆。羅馬1582混合模式排除10月5–14日;不聲稱全球同日改歷。正向支持天文年−4712至3000,逆向支持JD0至3000000,不處理負JD;年0不寫成「西元前0年」。 24h視為隔天0h,跨改歷時仍按連續JD前進。 MJD午夜為整數,JD正午為整數。此課程只做曆法算術,同一時間尺度轉換,不混入UT1/TT差值或時區。

我的理解檢查

天文紀年的0年,對應通常歷史紀年的哪一年?

西元前1年 — 天文年號保留0,歷史西元前/後計年通常沒有0年。

羅馬1582年10月4日到15日,JD要增加多少?

1天 — 在該混合規則中,它們是相鄰日期。

MJD=0對應什麼?

JD=2400000.5 — MJD換了零點;兩者不是同一個數字。

連續時間沒有因為改歷跳走;變的是日期標籤。曆法、年號和時間尺度必須寫清楚。

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

時間與曆法 · 全部互動課程