-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
計算古六曆的代碼 #2
Comments
|
這邊之前也研究過古六歷 之前看過許名瑲老師的推步方法 另外這個工具也列出了古六歷的計算方法 看起來推步的時候 您或可參考看看 另外不知為何 |
請問 這一段不曉得在哪邊有介紹呢 |
謝謝您的資料! 那裡好像有其他曆法的計算,我正想撰寫古代曆法的一般計算法,或可比較各家的計算方法。
可以舉個例子嗎? 如果你是指列出的公曆日期,那是因為我說:
我最初是從張培瑜的《中国先秦史历表》書中前言看到的,後來也見於張培瑜、陳美東、薄樹人和胡鐵珠著的《中国古代历法》,但後者的敘述並不比前者詳細。我算出來的古六曆和張培瑜著的《中国先秦史历表》和《三千五百年历日天象》核對過,結果是一致的。這樣我才有信心把結果列出來,並撰文解釋我的算法。 |
張培瑜的《中国先秦史历表》可以在以下網址免費閱讀: 我的古六曆知識有90%就是看書中前言的第3-6頁學會的。 |
許名瑲老師在計算曆譜的時候 這邊也照著處理過 |
這邊採用另一個推步方法 和 青川郝家坪秦牘《田律》曆日考釋 |
感謝您提供的資料和建議! 許名瑲老師的計算和《中国古代历法》介紹的算法是一致的,但他採用閏餘法以閏餘不少於12的年份置閏,和《中国先秦史历表》的固定冬至置閏法稍有不同。拙文「古六曆計算法」說明兩者除了在顓頊曆和夏曆的計算中有時閏月會出現差異外,其餘的結果是相同的。他的魯曆朔餘不同,應該是他因為他用了《開元占經》的上元積年數:
至於殷曆差一個月的問題,我對此也感到困惑。拙文「古六曆計算法」註三提到「張培瑜在《中国先秦史历表》、《三千五百年历日天象》和《中国古代历法》第三章都說殷曆以建子為年首,和一般的說法不同,卻沒有解釋為什麼持這不同說法。」看來許名瑲也是認為殷曆的建正是建子,這是什麼原故,我至今不明。我的殷曆是按建丑來算的。 順便問一下,您認識參與維基百科古六歷的編者嗎? 前兩天我發現拙文「古六曆計算法」竟然被徵引,感到十分意外。 關於朔餘跟節氣小餘的建議,我有些看法和問題,稍後再說。 |
那個維基百科古六歷的編者就是小弟啦 |
原來如此! 我也猜測那個維基百科的編者可能是您或是和您有聯繫的人,所以才有此一問。真感謝你對拙文的謬贊。該文只是我對古六曆學習的一點心得,還是應該請古六曆專家指教,看看有沒有錯。 關於增加氣朔小餘一事。我也認為小餘對於您我編算古曆者來說很有價值,我在春秋魯曆算法一文中說了這裡的春秋曆是根據《中国古代历法》表 3-7列出的朔小餘推出的。 這裡沒有把小餘列出,是有兩個原因。其一是除了曆算者外,其他人對此興趣不大。其二是我想建立一個統一的系統,如果真要提供氣朔小餘,就不應該只限於古六曆,其他曆法的小餘也當列出,這就有困難了。對於唐朝以前的曆法問題不大,因為用平朔平氣法計算很簡單,我的計算基本上完全符合《三千五百年历日天象》的數據。《宣明曆》、《授時曆》和《大統曆》的計算也問題不大,只是在唐宋幾百年間的很多定朔計算我還沒有完全掌握,尤其對進朔法的具體計算了解不深。更麻煩的是有幾部曆法失傳了,我在編制遼金的曆法時就遇到了這個問題。這裡的年曆網頁裡的古代日曆都會列出按當時曆法計算的曆書節氣日期,我在宋遼金元朔閏異同表表末的備註說明遼金時期的《調元曆》和賈俊《大明曆》已失傳,我就只能免強用《宣明曆》和趙知微的《重修大明曆》計算947年到1136年遼金曆書節氣,然後調正6個與朔日不符的節氣日期。 至於清朝,我聽說故宮博物院收藏了清朝每年編的《大清時憲書》,內有月相和節氣時刻,但我不知道到哪裡去找這些數據。我對清朝曆法沒有深入研究,最近下載了《曆象考成》和《曆象考成後編》的電子版。但是文言文對我來說不易看懂,如果不是沒有辦法我不想去看。您知不知道有什麼好的書藉和文章介紹清朝《時憲曆》的計算方法? |
小弟工具的目的是為了能夠轉換歷史上實際施行、使用過的曆數 關於時憲曆的計算 |
這裡的資料也是盡量以實曆為依歸,實在找不道資料時才用復原計算。而且所有自己計算必需與其他可靠的資料核對過才會放上來,也會盡量撰文解釋算法。所以如果能找到《大清時憲書》資料就最好。 |
回應kanasimi的問題:
**不曉得這邊的古六曆,是否有可能匯出成
這樣的形式呢?例如 春秋曆:
1457728 29;30;29;30;29;30;30;29;30;29;30;29**
下面的 JavaScript 程式應該可以滿足你的要求。這是按照這裡古六曆網頁的方法寫的,置閏法則採用固定冬至法。
用法:
執行 guliuli(曆法, 公曆年份) 就會輸出一個Array,含有[歲首JDN, 日數, 日數, ..., 日數],如果Array的長度是13,則該年沒有閏月,如果Array的長度是14,最後一個數字是閏月的日數(閏月總是置於年終)。
例:
console.log(guliuli("Zhou", -386));
輸出:
[ 1580043, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30 ]
就是古六曆網頁例一的結果。
console.log(guliuli("Xia1", -386));
輸出:
[ 1580131, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30 ]
就是古六曆網頁例二的結果。
如果要把數據分成你說的兩欄也不難,例如:
for (var y=-479; y <= -221; y++) {
var cm = guliuli("Zhou", y);
console.log(cm.shift(), cm.join(';'));
}
這就印出了從-479年到-221年的周曆數據。
我檢查了幾個年份和幾部古六曆都沒有錯,但是還是建議您再檢查一下以防有bug,如果發現有 bug 請告知。
最後要說的是春秋曆不是古六曆,不能用古六曆的方法計算,因為其置閏沒有常規,需要另外用Array儲存有閏月的年份。
The text was updated successfully, but these errors were encountered: