中国传统历法-干支日速算问题

  • 2026-01-10 23:43:46

文章目录

1. 干支日速算口诀2. 口诀的解释3. 用程序计算干支日4. 干支序数5. 月份调整系数5.1. 平年月份调整系数:5.2. 闰年月份调整系数:6. 参考文献

之前那篇中国传统历法发出后,有人问我关于干支日速算的问题。

吕老师您好!看了您的一篇历法文章 …… 我正在研究干支记日,想请教现在流行的口诀(乘五除四九加日……)为什么要事先用年数减去1900呢。

在此统一做一个解答。

本文同时发布在我的个人博客和简书 上。

干支日速算口诀网上流传的口诀是这样的:

乘五除四九加日,双月间隔三十天,一二自加整少一,三五七八十尾前。

口诀的解释这个计算法,实际上就是找一个已知干支日的具体日期,然后算循环。

1900年1月1日是甲戌日,干支序数为11(假设一个1月0日,干支为序号10,方便计算,这样1月X日的干支序号就是X+10)。

乘五除四是因为一年365天,一年干支差5天,算上闰年每4年多差一天。这样算下来,就是当年1月1日和1900年1月1日干支的差值。需要注意的是,闰年润在2月,闰年当年的1月1日并不差闰年当年那一天,所以如果恰好除尽的话应该再减1。

得到当年1月1日干支后,再算当前月1日和1月1日差几天。把当月之前的月份天数相加即可,如2月1日和1月1日差31天,4月1日和1月1日差(31+28+31)天,除60取余为30天。6月1日和1月1日差31+28+31+30+31+30天,相当于差1天。这就是所谓调整系数。要注意闰年2月多一天,当年调整系数都不一样。

得到当月1日的干支数,加上当天天数,就是当天干支数了。

我的公式:

110+(Y-1900)÷4❨取整,如除尽则再减1❩+(Y-1900)×5+月份调整系数+日期

得到的数字除60取余就是干支序号。

其实就是(基准干支序数+闰年差值+基本年初差值+月初差值+日期)/60 再取余数。

明白了这个道理,完全可以自己定义一个新的口诀,比如2000年1月1日是戊午日(干支序号55),以此为起点可以制定以下公式:

154+(Y-2000)÷4❨取整❩+(Y-2000)×5+月份调整系数+日期

这个公式比之前那个公式优美的地方在于2000年本身是闰年,算闰年的时候不必「除尽再减1」了。而且计算量也小。

用程序计算干支日其实前面的公式那么复杂,又是平年闰年,又是调整系数的,只是因为人脑的计算力有限,无法直接算出两个日期之间相差多少天。如果用程序计算,两个日期之间的差值完全可以直接算出来,再加上基准日期干支,得到的数字除以60再取余,就是当前日期干支了。

用Excel来尝试计算:

在A1单元格里输入「2000/1/1」,在B1单元格里输入「1900/1/1」,C1单元格里输入公式=A1-B1,在A4单元格里输入公式=MOD(C1+11,60),得出当日干支序号为56,即己未日。

尴尬的事情发生了,当天明明是戊午日,干支序号是55。公式应该是没有问题的为什么结果差了一天?

原来Excel当初为了兼容一个古老的BUG,将1900年也当成了闰年,导致计算日期差值的时候,用1900年3月之后的日期,减1900年2月底之前的日期,都会有1天的差值。

明白了这个原因,只要重新设置一个起点就好了。1900年4月20日为葵亥日,干支序数为60,也可以理解为0。

将B1单元格的日期改为「1900/4/20」,将A4单元格里的公式改为=MOD(C1,60),即可得到正确的干支序号55,即戊午日。

干支序数十天干:

1 甲 2 乙 3 丙 4 丁 5 戊 6 己 7 庚 8 辛 9 壬 10 癸

十二地支:

1 子 2 丑 3 寅 4 卯 5 辰 6 巳 7 午 8 未 9 申 10 酉 11 戌 12 亥

干支序数:

01 甲子 11 甲戌 21 甲申 31 甲午 41 甲辰 51 甲寅02 乙丑 12 乙亥 22 乙酉 32 乙未 42 乙巳 52 乙卯03 丙寅 13 丙子 23 丙戌 33 丙申 43 丙午 53 丙辰04 丁卯 14 丁丑 24 丁亥 34 丁酉 44 丁未 54 丁巳05 戊辰 15 戊寅 25 戊子 35 戊戌 45 戊申 55 戊午06 己巳 16 己卯 26 己丑 36 己亥 46 己酉 56 己未07 庚午 17 庚辰 27 庚寅 37 庚子 47 庚戌 57 庚申08 辛未 18 辛巳 28 辛卯 38 辛丑 48 辛亥 58 辛酉09 壬申 19 壬午 29 壬辰 39 壬寅 49 壬子 59 壬戌10 癸酉 20 癸未 30 癸巳 40 癸卯 50 癸丑 60 癸亥

月份调整系数平年月份调整系数:

月份

调整系数

1月

0

2月

31

3月

59

4月

30

5月

0

6月

31

7月

1

8月

32

9月

3

10月

33

11月

4

12月

34

闰年月份调整系数:

月份

调整系数

1月

0

2月

31

3月

0

4月

31

5月

1

6月

32

7月

2

8月

32

9月

4

10月

34

11月

5

12月

35

参考文献

知乎:日干支究竟如何与公历日期相互转换?

知乎:也许是最冷的电脑冷知识:1900年闰年Bug

微软社区:Excel 公历1900年2月总天数的错误

友情链接
Copyright © 2022 中国世界杯_多哈世界杯 - dianxinto.com All Rights Reserved.