toolfree

農曆國曆轉換

國曆與農曆互轉,涵蓋 1900 到 2100 年,同時顯示干支、生肖與當日節氣。曆表由天文算法在編譯時產生,並與公布的日期逐一核對過。

在你的瀏覽器中執行

農曆
干支年
生肖
星期
節氣
下一個節氣

所有日期以東八區的日界為準,農曆本來就是這樣定義的。

農曆是天文,不是公式

農曆沒有公式。任何一個轉換器骨子裡都是一張表,而那張表是把兩個天文問題反覆問出來的答案:

  1. 朔在什麼時候? 含有朔(日月合朔那一刻)的那一個曆日,就是初一。不是隔天,也不是初見 新月的那天,而是合朔那一瞬間所在的日子。
  2. 太陽黃經什麼時候通過 30 度的倍數? 那十二個時刻就是中氣,它們是把農曆的月份綁在季節上 的東西。

兩者都以東八區計算,因為農曆本來就是這樣定義的。這不是細節:一個發生在北京時間 00:14 的 朔,和同一個朔記成前一天 16:14 UTC,會讓整個月提前一天開始。

三條規則

大多數說明都講錯的那一條

到處都看得到「沒有中氣的月份就是閏月」。這不是規則,而且是錯的。

1985 年正月為例,它從 2 月 20 日到 3 月 20 日,裡面一個中氣都沒有:雨水落在 2 月 19 日, 是它開始的前一天;春分落在 3 月 21 日,是它結束的後一天。照那條「規則」它該是閏月。但它不是—— 1985 年根本沒有閏月。

問題出在規則的適用範圍。月數是以「歲」為單位數的,從冬至到冬至,而那一歲只有十二個月。 1984 年的冬月剛好含了兩個中氣——12 月 22 日的冬至與 1985 年 1 月 20 日的大寒,相隔二十九天, 塞在同一個三十天的月份裡——正月才會分不到。既然只有十二個月,就沒有東西要插進去,也就不置閏。

一月初地球過近日點,走得最快,中氣之間會擠到約二十九天半,一個三十天的月份便有可能吞下兩個。 這種年份就是這樣來的。

閏月的分布極不平均

這張表涵蓋的 201 年裡共有 74 個閏月,而它們的分布嚴重偏斜:

閏月1900–2100 出現次數
閏四月14
閏五月14
閏六月12
閏三月、閏二月、閏七月各 8
閏八月7
閏九月1——只有 2014 年
閏十月1——只有 1984 年
閏十一月1——只有 2033 年
閏正月、閏十二月從未出現

原因在地球軌道。七月初過遠日點,太陽走得最慢,相鄰兩個中氣可以拉開到約 31.4 天,一個 29 或 30 天的月份很容易剛好卡在兩者之間,一個都碰不到。一月初過近日點則相反——中氣擠到約 29.4 天, 一個月要完全不含中氣幾乎不可能。

所以 2033 年的閏十一月不是趣聞,而是農曆最罕見的一種情形,也正是當年好幾本曆書算錯的原因。

為什麼只做到 1900 與 2100

再往外算不是做不到,是不敢保證。關鍵在 ΔT——地球自轉與均勻時之間的差。2005 年以前是量出來的, 之後是外推的,到 2100 年的外推誤差大約是一分鐘。

一分鐘只對「本來就落在午夜前後一分鐘」的時刻有影響,而這兩百年裡有十六個。最極端的是 2057 年 9 月 28 日的一個朔,落在北京午夜前兩秒。市面上的曆書對那個月本來就有分歧,將來也還會 有;沒有誰算錯,只是問題比資料本身更精細。

其他幾個也值得記一筆,性質完全一樣:1979 年的大寒與 1923 年的雨水都在午夜前後三秒內, 2021 年的冬至則落在 23:59:19。

這張表是怎麼來的

它在編譯時產生,用的是 Meeus《Astronomical Algorithms》第 49 章的月相與第 25 章配合 VSOP87 的太陽位置,換算成東八區的曆日之後,再套上面那三條規則。

產生器在對不上公布日期時拒絕輸出任何東西:29 個從 1900 到 2100 的春節日期、31 個閏月 (包括 2033 年)、11 個確定無閏月的年份,以及 12 個節氣。這些錨點在測試裡再驗證一次,所以重新 產生曆表不可能悄悄改掉答案。

之後全部在你的瀏覽器裡執行,曆表本身大約 11 kB。

頁面上的其他欄位

干支是六十甲子:十天干配十二地支,六十年一輪,不是十二年。2024 年是甲辰,1964 年也是, 2084 年還是。

節氣顯示這個日期落在哪一個節氣裡,以及下一個節氣還有幾天。想看整年的話, 二十四節氣表列出全部二十四個。

生肖從春節換,不是從元旦換——這是最多人算錯的一件事,另有專頁說明