干支紀年演算法

2022-02-10 13:39:03 字數 2076 閱讀 4006

作為21世紀的新青年,不會干支的程式設計師肯定不是乙個好司機,中華文化源遠流長,古代文明令人欽佩不已,十二地支對應十二個時辰(乙個時辰等於兩小時),又暗合十二生肖,每個生肖又對應著五行和陰陽屬性,五行之中又相生相剋,而天乾同樣有對應的五行陰陽,五行陰陽又暗合日月星辰和方位,利用占卜可以得吉凶,扯遠了,再說下去估計就變成神棍了,言歸正傳, 天干地支組成形成了古代紀年曆法。十天幹和十二地支依次相配,組成六十個基本單位,兩者按固定的順序相互配合,組成了干支紀元法,為60甲子表,也就是幾時幾刻。

十大天乾: 甲 乙 丙 丁 戊 己 庚 辛 壬 癸

對應編號: 1  2  3  4  5  6  7  8  9  10

十二地支: 子 醜 寅 卯 辰 巳 午 未 申  酉 戌  亥

對應編號: 1  2  3  4  5  6  7  8  9  10 11 12

①年幹公式:年幹=公元年個位數-3 (個位小於3,加10)

例:求2023年,2023年和2023年天乾?

解:2023年幹=9-3=6=己,2023年幹=1-3+10=8=辛,2023年幹=5-3=2=乙

②年支公式:

(公元年末二位數-11)-12*n=年支(適用於20世紀,即1900—2023年)

(公元年末二位數+5)-12*n=年支(適用於21世紀,即2000—2023年)

對於年支計算,具有侷限性,20世紀、21世紀演算法都不一樣,總所周知,庚子年(1900)八國聯軍入侵北京,1900末兩位數減去 11 得到的負值,然後補位+12得到1,即為:

(0-11+12)%12=1 對應的子,故1900為庚子年。而別的**介紹,方法更是五花八門,各種情況下都有不同的演算法,實在是太繁瑣,不便於計算

我稍稍精簡了下演算法,直接  (年份)%12 +9 = 年支  ,大於一輪地支數12的就減去12,此方法適用於20世紀、21世紀,還適用於18世紀,六十一甲子,就會迴圈一次,把1900往前推60年,即2023年(第一次鴉片戰爭)肯定也是庚子年,帶入公式 1840%12+9=13 結果大於12,然後減去12得1 ,所以2023年的年支為子。對於21世紀,帶入2017,同樣得到年支酉,經過大量測試,是沒有問題的,作為乙個有追求的程式設計師,怎麼會止步於此,於是,後台程式就出來了

protected

void btnjudge_click(object

sender, eventargs e)

;string z = ;

//獲取文字框值

string year =txtyear.text.trim().tostring();

string i = year.substring(3,1

);

int lasti =convert.toint32(i);

//計算年幹

lasti = lasti > 3 ? lasti - 3 : lasti + 10 - 3

;

string yearg = g[lasti-1

];

//計算年支

int lastz = convert.toint32(year) % 12 + 9

; lastz = lastz > 12 ? lastz - 12

: lastz;

string yearz = z[lastz-1

];

string all = yearg +yearz;

response.write(""

);

}

對於文字框輸入值合不合法,則是在前台進行判斷

對於月份的演算法,這就比較複雜了,需要查詢月乾表,如現在還是丙申猴年的臘月,那麼查下表可得,月支為 辛丑 

然而在程式設計師的眼中,這只是乙個二維陣列而已,建立了此表,然後根據年幹和月份來查詢月支即可,僅此而已。

關於這些皮毛,個人只是興趣愛好,中華文明,博大精深,而現代社會的高速發展,讓身邊的人都忙忙碌碌,或許是無暇顧及其它,讓人不由得想起了那句:子在川上曰,逝者如斯夫

干支法紀年演算法

在我國古代和近代,一直採用干支法紀年。它採用10天乾和12地支配合,乙個迴圈週期為60年。10天乾是 甲,乙,丙,丁,戊,己,庚,辛,壬,癸 12地支是 子,醜,寅,卯,辰,巳,午,未,申,酉,戌,亥 如果某年是甲子,下一年就是乙丑,再下是丙寅,癸酉,甲戌,乙亥,丙子,總之天乾 位址都是迴圈使用,兩...

風火程式設計 干支紀年法的完整轉換 可用於八字推算

coding utf 8 import re from math import ceil from datetime import datetime import requests from lxml import etree tg 癸甲乙丙丁戊己庚辛壬 天乾字串 dz 亥子丑寅卯辰巳午未申酉戌 位...

MATLAB公曆日期求干支紀日的干支

請不要抱太大期望,我只是一時興起搞的。設定參考點,1911年6月23日是甲子,然後求出日期差,對60取餘,得到在干支表中的位置。再分別對10 12取餘,得到具體的干支序數。其中,求兩個日期的差用儒略曆,比較方便。實測貌似公元1582年之前的就算不准了。是否和儒略曆本身有關不知道。function a...