作為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...