分享

一文带你彻底弄明白干支纪日与公历换算(上)

 华民 2025-03-24

天干地支的发明标志着最原始的历法出现,将它们赋予数字用来计算年岁。将十天干与十二地支进行两两搭配形成六十组不同的组合,用以标记年月日时的历法,叫作干支历。干支历主要由干支纪年、干支纪月、干支纪日和干支纪时四部分组成。公元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点之后才是本年干支。

好啦,下期我们再继续讲月干支、日干支和时干支的推算,欢迎在下方评论留言点赞哦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多