大家好,欢迎来到IT知识分享网。
干支纪年,是指中国纪年历法,自上古以来就一直使用的纪年方法。干支是天干和地支的总称。把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的“干支表”。干支纪年与公元纪年可以相互转换。公元年转化为干支年比较好算,干支年转化为公元年目前的流行方法是查表法,先根据干支,查出在干支表中所出的年次,再根据干支年和公元年的关系推算公元年?那么有没有不用查表,就能根据干支利用公式快速计算出干支所处年次的方法呢?
一、公元年转化为干支年
根据公元年数推算这一年的干支,算法比较简单。计算公式:
T=(AD-3) MOD 10 式(1)
B=(AD-3) MOD 12 式(2)
式中:T,是Trunk的首字母,代表天干序号;B是Branch的首字母,代表地支序号。AD是Anno Domini的缩写,代表公元;MOD是求余运算符。
比如今年是2022年,根据上述公式,可以推出T=9,B=3。根据表1,天干序号为9的是“壬”。根据表2,地支序号为3的是“寅”,所以2022年是壬寅年。注意:如果T=0,相当于余10,对应“癸”,如果B=0,相当于余12,对应“亥”。
| 天干 | 序号 |
| 甲 | 1 |
| 乙 | 2 |
| 丙 | 3 |
| 丁 | 4 |
| 戊 | 5 |
| 己 | 6 |
| 庚 | 7 |
| 辛 | 8 |
| 壬 | 9 |
| 癸 | 10 |
| 地支 | 序号 |
| 子 | 1 |
| 丑 | 2 |
| 寅 | 3 |
| 卯 | 4 |
| 辰 | 5 |
| 巳 | 6 |
| 午 | 7 |
| 未 | 8 |
| 申 | 9 |
| 酉 | 10 |
| 戌 | 11 |
| 亥 | 12 |
式(1)、(2)中的减3是怎么来的呢?先看表3,一个一个周期60年的干支年次表,从表中可以看出,甲子是一个周期的第1年,癸亥年第60年,而辛酉年是第58年。而公元1年好是我国的辛酉年,是干支年的第58年。所以,往后推3年就到了下一个干支周期的干支1年甲子年,而这一年是公元4年,所以公元4年-干支1年=3年。这就是要减3的原因。
| 干支年次(TB) | 天干(T) | 地支(B) |
| 1 | 甲 | 子 |
| 2 | 乙 | 丑 |
| 3 | 丙 | 寅 |
| 4 | 丁 | 卯 |
| 5 | 戊 | 辰 |
| 6 | 己 | 巳 |
| 7 | 庚 | 午 |
| 8 | 辛 | 未 |
| 9 | 壬 | 申 |
| 10 | 癸 | 酉 |
| 11 | 甲 | 戌 |
| 12 | 乙 | 亥 |
| 13 | 丙 | 子 |
| 14 | 丁 | 丑 |
| 15 | 戊 | 寅 |
| 16 | 己 | 卯 |
| 17 | 庚 | 辰 |
| 18 | 辛 | 巳 |
| 19 | 壬 | 午 |
| 20 | 癸 | 未 |
| 21 | 甲 | 申 |
| 22 | 乙 | 酉 |
| 23 | 丙 | 戌 |
| 24 | 丁 | 亥 |
| 25 | 戊 | 子 |
| 26 | 己 | 丑 |
| 27 | 庚 | 寅 |
| 28 | 辛 | 卯 |
| 29 | 壬 | 辰 |
| 30 | 癸 | 巳 |
| 31 | 甲 | 午 |
| 32 | 乙 | 未 |
| 33 | 丙 | 申 |
| 34 | 丁 | 酉 |
| 35 | 戊 | 戌 |
| 36 | 己 | 亥 |
| 37 | 庚 | 子 |
| 38 | 辛 | 丑 |
| 39 | 壬 | 寅 |
| 40 | 癸 | 卯 |
| 41 | 甲 | 辰 |
| 42 | 乙 | 巳 |
| 43 | 丙 | 午 |
| 44 | 丁 | 未 |
| 45 | 戊 | 申 |
| 46 | 己 | 酉 |
| 47 | 庚 | 戌 |
| 48 | 辛 | 亥 |
| 49 | 壬 | 子 |
| 50 | 癸 | 丑 |
| 51 | 甲 | 寅 |
| 52 | 乙 | 卯 |
| 53 | 丙 | 辰 |
| 54 | 丁 | 巳 |
| 55 | 戊 | 午 |
| 56 | 己 | 未 |
| 57 | 庚 | 申 |
| 58 | 辛 | 酉 |
| 59 | 壬 | 戌 |
| 60 | 癸 | 亥 |
二、干支年转换为公元年
1、查表法
那么如果已经知道干支年,那么能不能反推出公元年呢。比如,想知道“癸丑”年都对应的是公元多少年?网上有好多方法,但大部分都是查表法,从表3查出一个周期中查出“癸丑”年是第50年,然后再利用公式:50+3+n*60,推算出“癸丑”年所有的公元年份,如表4所示。
| n | 公元年 |
| 0 | 53 |
| 2 | 173 |
| 3 | 233 |
| 4 | 293 |
| 5 | 353 |
| 6 | 413 |
| 7 | 473 |
| 8 | 533 |
| 9 | 593 |
| 10 | 653 |
| 11 | 713 |
| 12 | 773 |
| 13 | 833 |
| 14 | 893 |
| 15 | 953 |
| 16 | 1013 |
| 17 | 1073 |
| 18 | 1133 |
| 19 | 1193 |
| 20 | 1253 |
| 21 | 1313 |
| 22 | 1373 |
| 23 | 1433 |
| 24 | 1493 |
| 25 | 1553 |
| 26 | 1613 |
| 27 | 1673 |
| 28 | 1733 |
| 29 | 1793 |
| 30 | 1853 |
| 31 | 1913 |
| 32 | 1973 |
| 33 | 2033 |
2、公式法
那么有没有更快速的一种方法,不用查表,就可以根据干支快速地计算出一个周期中,这对干支对应的年次呢?下边进行逐步探讨。
(1)数字化处理
如果把表3中的天干和地支都由表1、表2中的序号来代替(天干的10用0代替,地支的12用0代替),那么就得到表5。发现这张表得每一行就是干支年次分别对10和12求余的结果。这样就把干支纪年表转化成了1至60对10、12求余的余数表,表中,TB代表干支年次,R10代表干支年次TB除以10的余数,R12代表TB除以12的余数。
| 干支年次(TB) | R10 | R12 |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 4 | 4 |
| 5 | 5 | 5 |
| 6 | 6 | 6 |
| 7 | 7 | 7 |
| 8 | 8 | 8 |
| 9 | 9 | 9 |
| 10 | 0 | 10 |
| 11 | 1 | 11 |
| 12 | 2 | 0 |
| 13 | 3 | 1 |
| 14 | 4 | 2 |
| 15 | 5 | 3 |
| 16 | 6 | 4 |
| 17 | 7 | 5 |
| 18 | 8 | 6 |
| 19 | 9 | 7 |
| 20 | 0 | 8 |
| 21 | 1 | 9 |
| 22 | 2 | 10 |
| 23 | 3 | 11 |
| 24 | 4 | 0 |
| 25 | 5 | 1 |
| 26 | 6 | 2 |
| 27 | 7 | 3 |
| 28 | 8 | 4 |
| 29 | 9 | 5 |
| 30 | 0 | 6 |
| 31 | 1 | 7 |
| 32 | 2 | 8 |
| 33 | 3 | 9 |
| 34 | 4 | 10 |
| 35 | 5 | 11 |
| 36 | 6 | 0 |
| 37 | 7 | 1 |
| 38 | 8 | 2 |
| 39 | 9 | 3 |
| 40 | 0 | 4 |
| 41 | 1 | 5 |
| 42 | 2 | 6 |
| 43 | 3 | 7 |
| 44 | 4 | 8 |
| 45 | 5 | 9 |
| 46 | 6 | 10 |
| 47 | 7 | 11 |
| 48 | 8 | 0 |
| 49 | 9 | 1 |
| 50 | 0 | 2 |
| 51 | 1 | 3 |
| 52 | 2 | 4 |
| 53 | 3 | 5 |
| 54 | 4 | 6 |
| 55 | 5 | 7 |
| 56 | 6 | 8 |
| 57 | 7 | 9 |
| 58 | 8 | 10 |
| 59 | 9 | 11 |
| 60 | 0 | 0 |
(2)思路来源
在文章用列表法分析1500年前南北朝时期的“奥数”题(以下简称《列表法》)中,给出了用列表法推算《孙子算经》“物不知数”3、5、7三个数乘率的方法。这样对于每一组余数,就可以根据公式计算出相对应的那个被除数。
那么同理,能不能也找出10、12的乘率K10、K12,确定一个公式,由一组干支的序号也可以快速推算出干支年次,然后计算出相应的公元年呢?
(3)K12的确定
我们还用列表法尝试一下,从表5中,搜索当R10为0的情况,如表6所示。
| 干支年次(TB) | R10 | R12 |
| 10 | 0 | 10 |
| 20 | 0 | 8 |
| 30 | 0 | 6 |
| 40 | 0 | 4 |
| 50 | 0 | 2 |
| 60 | 0 | 0 |
从表中可以看到,,但R10=0时R12只有6个,从10依次递减2,而R12本身应该有12个,为什么会少了一半呢?看表5,对于任意一个天干年次TB,其对应的R10和R12要么都是奇数,要么都是偶数,没有奇数和偶数的组合,当R10固定时,R12变化的幅度最小是2。
也就是说,要想让R12实现变化步幅是1,那么R10也需要变换1步,这样才能实现奇数对奇数、偶数对偶数的搭配。
实现这个目的的最简单的方法就是R10增加1,同时R12也增加1,但这种变化在R10、R12都小于10时R10-R12=0,当超过9之后,R10-R12=2,当超过19以后,R10-R12=4,差值发生了跳变,不是连续的,所以这个规律不适用。
那么实现R10、R12奇数对奇数、偶数对偶数的方法还有一种,就是一个增加1步,一个减少1步,相对运动是2步,那么也可以实现奇数对奇数、偶数对偶数的目的。
那么哪个余数增加,哪个余数减少呢?从表6中可以看出,随着干支年次的增加,R12的余数是递减的,也就是逆增长,所以确定这个余数是减少的。那么根据 《列表法》给出的爬爬虫定律1,先找到除数12的余数0在第6行,反向移动,找到它上边的2在第5行,第6行干支年次是60,第5行干支年次是50,又因为步伐是2,所以R12的乘率K12=(50-60)/2=-5。
(3)K10的确定
因为确定除R12是减1变化,那么R10就是加1变化。再从表5中,搜索当除数R12=0的情况,如表7所示。从表中可以看到,搜出5行,从第1行到第4行,R10从2依次递增到8,而0在最后一行,说明0之后的那个2在下一个周期的第一行,也就是对应的干支年次为12+60=72。所以R10的乘率K10=(72-60)÷2=6。
| 干支年次(TB) | R10 | R12 |
| 12 | 2 | 0 |
| 24 | 4 | 0 |
| 36 | 6 | 0 |
| 48 | 8 | 0 |
| 60 | 0 | 0 |
(4)干支年次计算公式
根据以上计算出的乘率,我们能确定根据干支来计算干支年次的公式为:
TB=6*R10-5*R12±n*60 式(3)
注意:公式中,R10代表干支年次除10的余数,R12代表干支年次除12的余数,n代表计算的结果加上或减去n倍60,直到计算结果在[1,60]为止。由于R12是减1变化,所以可能出现计算结果小于0的情况。
(5)验证公式
我们把所有的1到60除10、除12对应的所有余数,代入公式(3)来计算一下结果。
验证结果如表8所示,当n=0时的计算结果都在(-60,60)之间,所以只需要把小于1的再加一次60就能把全部结果换算至[1,60]之间,见AD(n=1)列,所有计算结果与干支年次完全一致,这就验证了公式的正确性。
| 干支年次 | R10 | R12 | TB(n=0) | TB(n=1) |
| 1 | 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 2 | 2 |
| 3 | 3 | 3 | 3 | 3 |
| 4 | 4 | 4 | 4 | 4 |
| 5 | 5 | 5 | 5 | 5 |
| 6 | 6 | 6 | 6 | 6 |
| 7 | 7 | 7 | 7 | 7 |
| 8 | 8 | 8 | 8 | 8 |
| 9 | 9 | 9 | 9 | 9 |
| 10 | 0 | 10 | -50 | 10 |
| 11 | 1 | 11 | -49 | 11 |
| 12 | 2 | 0 | 12 | 12 |
| 13 | 3 | 1 | 13 | 13 |
| 14 | 4 | 2 | 14 | 14 |
| 15 | 5 | 3 | 15 | 15 |
| 16 | 6 | 4 | 16 | 16 |
| 17 | 7 | 5 | 17 | 17 |
| 18 | 8 | 6 | 18 | 18 |
| 19 | 9 | 7 | 19 | 19 |
| 20 | 0 | 8 | -40 | 20 |
| 21 | 1 | 9 | -39 | 21 |
| 22 | 2 | 10 | -38 | 22 |
| 23 | 3 | 11 | -37 | 23 |
| 24 | 4 | 0 | 24 | 24 |
| 25 | 5 | 1 | 25 | 25 |
| 26 | 6 | 2 | 26 | 26 |
| 27 | 7 | 3 | 27 | 27 |
| 28 | 8 | 4 | 28 | 28 |
| 29 | 9 | 5 | 29 | 29 |
| 30 | 0 | 6 | -30 | 30 |
| 31 | 1 | 7 | -29 | 31 |
| 32 | 2 | 8 | -28 | 32 |
| 33 | 3 | 9 | -27 | 33 |
| 34 | 4 | 10 | -26 | 34 |
| 35 | 5 | 11 | -25 | 35 |
| 36 | 6 | 0 | 36 | 36 |
| 37 | 7 | 1 | 37 | 37 |
| 38 | 8 | 2 | 38 | 38 |
| 39 | 9 | 3 | 39 | 39 |
| 40 | 0 | 4 | -20 | 40 |
| 41 | 1 | 5 | -19 | 41 |
| 42 | 2 | 6 | -18 | 42 |
| 43 | 3 | 7 | -17 | 43 |
| 44 | 4 | 8 | -16 | 44 |
| 45 | 5 | 9 | -15 | 45 |
| 46 | 6 | 10 | -14 | 46 |
| 47 | 7 | 11 | -13 | 47 |
| 48 | 8 | 0 | 48 | 48 |
| 49 | 9 | 1 | 49 | 49 |
| 50 | 0 | 2 | -10 | 50 |
| 51 | 1 | 3 | -9 | 51 |
| 52 | 2 | 4 | -8 | 52 |
| 53 | 3 | 5 | -7 | 53 |
| 54 | 4 | 6 | -6 | 54 |
| 55 | 5 | 7 | -5 | 55 |
| 56 | 6 | 8 | -4 | 56 |
| 57 | 7 | 9 | -3 | 57 |
| 58 | 8 | 10 | -2 | 58 |
| 59 | 9 | 11 | -1 | 59 |
| 60 | 0 | 0 | 0 | 60 |
(6)干支年变换公元年
那么有了一个周期内的计算公式,就可以根据干支计算出所有的公元年份了,计算公式为:
AD=TB+3+m*60 式(4)
式中,AD代表公元年,TB代表计算出的一周期内的干支年,R10代表天干所对应序号,R12代表地支所对应序号,注意R10可以等于0,也可以等于10,R12可以等于0,也可以等于12,不影响计算结果。
举例验证:以“壬寅”年为例,反推。查表1可知,R10=9;查表2可知,R12=3;代入公式(3),得:
TB=6*9-5*3=54-15=39年
那么再代入公式(4)依次加60,可计算出至2022年所有的壬寅年,如表9所示。
| n | 公元年 |
| 0 | 42 |
| 2 | 162 |
| 3 | 222 |
| 4 | 282 |
| 5 | 342 |
| 6 | 402 |
| 7 | 462 |
| 8 | 522 |
| 9 | 582 |
| 10 | 642 |
| 11 | 702 |
| 12 | 762 |
| 13 | 822 |
| 14 | 882 |
| 15 | 942 |
| 16 | 1002 |
| 17 | 1062 |
| 18 | 1122 |
| 19 | 1182 |
| 20 | 1242 |
| 21 | 1302 |
| 22 | 1362 |
| 23 | 1422 |
| 24 | 1482 |
| 25 | 1542 |
| 26 | 1602 |
| 27 | 1662 |
| 28 | 1722 |
| 29 | 1782 |
| 30 | 1842 |
| 31 | 1902 |
| 32 | 1962 |
| 33 | 2022 |
把表9与上图查到的资料对比,验证了结果完全正确,说明本文的变换公式
TB=6*R10-5*R12±n*60 式(3)
AD=TB+3+m*60 式(4)
正确,变换方法可行。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127538.html

