天干地支的发明标志着最原始的历法出现,将它们赋予数字用来计算年岁。将十天干与十二地支进行两两搭配形成六十组不同的组合,用以标记年月日时的历法,叫作干支历。干支历主要由干支纪年、干支纪月、干支纪日和干支纪时四部分组成。公元2017年5月12日(农历丁酉年四月十七)国家发布了《中华人民共和国国家标准GB/T33661—2017〈农历的编算和颁行〉》规定了干支纪年和生肖纪年起于正月初一0点。也就是说干支纪年不再是以立春为岁首,而是以农历正月初一为岁首。 ![]() 在这里我们要注意,“年”和“岁”在我国古代历法中是两个不同的时间概念。从冬至到下一个冬至时间长度,称为“一岁”;从农历中上一个正月初一到下一个正月初一,谓之“一年”。 干支纪日是我国一种独有的历法体系,以60日为一个周期,相当于公历的2个月。周而复始,循环往复。为了理解其与公历的转换,我们需要了解两个历法的闰年规则之间的差异。 ![]() 儒略历平年有365天,每四年有一个闰年,闰年一年有366天(二月增加一天,有29天),平均一年365.25天(与四分历一模一样),4年共计1461天,一个甲子是60天,二者最小公倍数是29220,29220天合计80年。干支纪日与儒略历的对应周期是80年,这意味着每隔80年,干支纪日对应的儒略历日期会完全循环一次。 但在实际使用过程中,儒略历的误差越来越大,于是1582年教皇格里高利十三世推行了以儒略历为基础改善而来的格里历,即现在通用的公历。 ![]() 公历的平年也是365天,我们知道公历闰年遵循的规律是:四年一闰,百年不闰,四百年再闰,闰年也有366天,平均一年365.2425天(经过长期统计和计算得来的)。所以400年共计146097天,和一个甲子60日,两者最小公倍数是2921940,2921940天合计8000年。这就是说,每隔80年,干支纪日对应的公历日期若没遇到平年(能被100整除但不被400整除的年份)的公元年份,换句话说遇到的是闰年的公元年份,会完全循环一次。假设未来不改公历,每8000年,干支纪日对应的公历日期会完整地循环一次。 例如1912年2月18日和1992年2月18日都是壬寅月甲子日,因为它们都是公历闰年。同样1916年1月1日和1996年1月1日都是戊子月丁酉日,因为它们也都是公历闰年。 ![]() 1.干支序号干支两两组合,阴配阴,阳配阳,形成六十甲子。我们给每个干支编上序号,甲子为01,乙丑为02,这样编下去,就得到了干支与序号对照表,如下图所示: ![]() 由序号很容易得到对应的干支,用序号除以10所得余数就是天干的序数,天干的序数为:甲1、乙2、丙3、丁4、戊5、己6、庚7、辛8、壬9、癸10。如果整除,余数为0,则天干为癸。 用序号除以12所得余数就是地支的序数,地支的序数为:子1、丑2、寅3、卯4、辰5、巳6、午7、未8、申9、酉10、戌11、亥12。如果整除,余数为0,则地支为亥。 ![]() 例如已知序号39求干支, 39÷10=3,余数为9,对应的天干序数是9,天干为壬;39÷12=3,余数为3,对应的地支序数是3,地支为寅,所以序号39对应的是干支壬寅。 反过来,知道了干支来推其序号,也很容易。这其实就是一个一次同余式方程组的求解问题,用初等数论中的中国剩余定理就可以解决。 例如要求干支壬寅的序号,我们列个方程组如下:X代表所求的干支序号。 X mod 10 =9 X mod 12 =3 根据中国剩余定理,有: X ≡6ⅹ9–5ⅹ3(mod 60),X=39,即干支壬寅的序号是39。 一般地,如果干支的序号为m,地支的序号是n,则干支的序号为: X ≡ 6m - 5n (mod 60) 若6m-5n的结果是正数,这个数就是干支的序号;如果是负数,把它加上60就是干支的序号。 2.公元后年份干支推算尽管有很多方法,但我以为能用数学方法来解决问题才是最完美的。闲话少说,先给个公式,然后再解释原因。 X= (Y-3) mod 60, 其中,X代表干支序号,Y代表公历年份,mod是数学运算符号,表示取模运算,简单说就是取余数,通常用符号“%”表示。 例如要求公元2025年干支, X=(2025-3) mod 60=2022 mod 60=42, 42 mod 10=2,天干序数为2,则天干为乙; 42 mod 12=6,地支序数为6,则地支为巳, 所以公元2025年为乙巳蛇年。 ![]() 其实,我们可以用Y-3直接除以10,就可以得到天干,用Y-3直接除以12,就可以得到地支。 这是因为X = (Y-3) mod 60等价于Y-3 = 60n + X,其中n为商,X为余数。 根据同余定理:如果a,b为整数,m为确定的正整数,当m能满足被(a–b)整除时,则称a,b对m同余,记作a≡b(mod m)。 ![]() X = (Y-3) mod 60,等式两边同时除以10,余数也必然相等。也就是说X除以10的余数等于(Y-3)除以10的余数。 这样一来,我们不用求干支的序号,直接根据(Y-3)分别求出天干和地支的序数,合起来就是干支啦,我们仍以公元2025年为例: (2025–3)÷10,余数为2,天干序数是2,所以天干为乙; (2025–3)÷12,余数为6,地支序数是6,所以地支为巳。 所以公元2025年是乙巳蛇年。 到这里,小伙伴们会问为什么年份要减去3呢? 这是因为干支纪年对应的是农历年,而不是公历年。但因为农历年的岁首和公历年的岁首相隔较近,使农历年总是和某一公历年的大部分重合。在公元前一年、公元0年和公元一年这三个年份,公历纪年的数字实际上没有真正变化,但干支纪年却需要使用三个不同的干支来表示。为了使干支纪年法与农历的起始点对齐,就需要从公元年份中减去3。 ![]() 当然这只是公元后年份干支的推算方法,那如果是公元前的年份该如何推算呢? 3.公元前年份干支推算废话少说,我们先上公式,后给出解释。 干支序号=58–(Y mod 60), 其中Y代表公元前的年份。 例如要求公元前221年的干支, 干支序号=58-(221 mod 60)=58-41=17,在六十甲子表中查询序号17的干支为庚辰,所以公元前221年是庚辰龙年。 熟悉历史的小伙伴们应该知道,这一年秦王嬴政完成了对六国的统一,建立了中国历史上第一个中央集权的封建王朝——秦朝。嬴政自称“始皇帝”,掀开了中国历史的一个新纪元。 小伙伴们又会问,为啥公式里用58作为被减数呢? 这是因为在六十甲子里,公元元年(公元1年)为辛酉年,序号为58,因为没有公元0年,所以辛酉年之前为公元前年份,辛酉年之后为公元后年份,公元前年份只对应58个干支。 ![]() 如果减数比被减数58大,则公式变为: 干支序号=118–(Y mod 60) 因为六十甲子循环嘛,所以被减数变成了58+60=118。 例如要求公元前119年的干支, 干支序号=118–(119 mod 60)=59,对应的干支为壬戌,所以公元前119年是壬戌狗年。 翻翻历史书,这一年正好是是汉武帝元狩四年,汉匈之间爆发了著名的漠北之战。 值得注意的是,本期所讲的公式没有考虑正月初一为岁首,换句话说在实际推算过程中碰到公历日期是正月初一的时候,要切记以正月初一0点为分界线,0点之前是上年干支,0点之后才是本年干支。 好啦,下期我们再继续讲月干支、日干支和时干支的推算,欢迎在下方评论留言点赞哦。 |
|