命理附录-四柱干支计算方法

附录:四柱干支计算方法

学八字时,很多人一开始会先知道:

某一年是什么年
某个月是什么地支
某个时辰是什么地支

比如知道:

2002年是壬午年
午年属马
上午9点到11点是巳时
下午3点到5点是申时

但排完整八字,还需要解决三个问题:

月柱的天干怎么算?
日柱的天干地支怎么算?
时柱的天干怎么算?

这篇就专门讲这三个计算方法。

先记住一句话:

年、月、日、时都要变成干支。
只知道地支,还不算完整的一柱。

一、排八字先注意节气

八字里的年和月,通常不是简单按农历正月初一来切换,而是重视节气。

尤其是:

年柱通常以立春为界。
月柱以十二节气为界。

比如一个人出生在2002年春节后,但如果还没有到立春,在八字里未必已经进入壬午年。

所以排八字时,一定要记住:

八字看的是节气中的时间气候。

入门学习可以先理解规则,真正排盘时最好用可靠工具核对。

二、月的地支怎么定

月支和节气有关。

十二个月支从寅月开始:

立春后为寅月
惊蛰后为卯月
清明后为辰月
立夏后为巳月
芒种后为午月
小暑后为未月
立秋后为申月
白露后为酉月
寒露后为戌月
立冬后为亥月
大雪后为子月
小寒后为丑月

所以,月支不是简单等于农历月份。

比如农历正月里,如果还没有立春,八字月支仍然不一定是寅。

判断月柱时,先看出生日期落在哪个节气之后。

三、月的天干怎么算:五虎遁

月支确定以后,还要确定月干。

月干不是随便配的,它由年干推出。

传统口诀叫“五虎遁”。

“虎”指寅,因为寅对应虎,也因为八字月份从寅月开始。

口诀是:

甲己之年丙作首
乙庚之年戊为头
丙辛之年寻庚起
丁壬壬寅顺水流
戊癸之年甲寅求

意思是:

甲年、己年:寅月从丙寅开始
乙年、庚年:寅月从戊寅开始
丙年、辛年:寅月从庚寅开始
丁年、壬年:寅月从壬寅开始
戊年、癸年:寅月从甲寅开始

然后天干按顺序往后排。

比如2002年是壬午年。

壬年属于:

丁壬壬寅顺水流

所以2002年的寅月是:

壬寅月

继续往后排:

寅月:壬寅
卯月:癸卯
辰月:甲辰
巳月:乙巳
午月:丙午
未月:丁未
申月:戊申
酉月:己酉
戌月:庚戌
亥月:辛亥
子月:壬子
丑月:癸丑

所以,如果一个人出生在2002年的午月,也就是芒种后到小暑前,那么月柱就是:

丙午月

四、月干速查表

为了方便记忆,可以先看这张表。

年干      寅月起点
甲、己    丙寅
乙、庚    戊寅
丙、辛    庚寅
丁、壬    壬寅
戊、癸    甲寅

后面的卯、辰、巳、午、未、申、酉、戌、亥、子、丑,只要顺着天干往后排就可以。

比如甲年:

寅月:丙寅
卯月:丁卯
辰月:戊辰
巳月:己巳
午月:庚午
未月:辛未
申月:壬申
酉月:癸酉
戌月:甲戌
亥月:乙亥
子月:丙子
丑月:丁丑

五、日柱怎么算

日柱最麻烦。

因为日干支不是按一年或一月重新开始,而是六十甲子一直一天一天循环。

所以日柱的本质是:

找一个已知的基准日,
计算目标日期和基准日相差多少天,
再按六十甲子循环往后推。

比如如果某一天是甲子日,那么:

第二天是乙丑日
第三天是丙寅日
第四天是丁卯日
……
第六十天是癸亥日
第六十一天又回到甲子日

这是最根本的原理。

实际计算时有两种方法:

查万年历
用公式计算儒略日数,再换算干支

初学可以先查万年历,因为日柱手算最容易出错。

如果想理解公式,可以看下面这一套。

六、用公历日期计算日柱

先把公历年月日换算成儒略日数 JDN。

这里先解释一下为什么要算 JDN。

日柱的本质不是“某年某月某日对应某个固定表格”,而是:

六十甲子一天一天连续循环。

只要知道某一天在连续日数中排第几天,就可以用除以 10、除以 12、除以 60 的余数来确定它的天干地支。

所以 JDN 的作用很简单:

把一个复杂的公历日期,变成一个连续的整数日号。

比如公历日期有年、月、日,还要考虑大月小月、闰年、世纪年这些问题。

JDN 先把这些全部压成一个数字。

一旦变成连续日号,后面就只剩下循环取余。

对于公历日期:

Y = 年
M = 月
D = 日

先计算:

a = floor((14 - M) / 12)
y = Y + 4800 - a
m = M + 12a - 3

这一组转换的原因,是把一年从三月开始算。

为什么要这样做?

因为公历闰年的多出来一天在二月。

如果把三月当作一年的第一个月,那么闰日就落在一年的最后部分,计算会更整齐。

这里的含义可以这样理解:

a:判断这个月份是否是一月或二月。
y:把一月、二月暂时算到上一年里,并整体加 4800 避免负数年份带来的麻烦。
m:把三月记为0,四月记为1,一直到次年二月记为11。

所以:

3月 -> m = 0
4月 -> m = 1
...
12月 -> m = 9
1月 -> m = 10
2月 -> m = 11

这样处理以后,闰年的复杂性就集中到年份计算里。

再计算:

JDN = D + floor((153m + 2) / 5) + 365y + floor(y / 4) - floor(y / 100) + floor(y / 400) - 32045

这个式子看起来长,但每一块都有作用:

D

表示这个月中的第几天。

floor((153m + 2) / 5)

用来累计从三月开始到当前月份之前的天数。

为什么是 153?

因为从三月开始,每五个月的天数大致是:

31 + 30 + 31 + 30 + 31 = 153

这个写法可以用一个统一公式处理大小月,不用逐月查表。

365y

表示普通年份的天数。

floor(y / 4) - floor(y / 100) + floor(y / 400)

表示公历闰年规则:

四年一闰
百年不闰
四百年再闰

所以要加上被 4 整除的闰年,减去被 100 整除的世纪年,再加回被 400 整除的世纪年。

-32045

是把上面算出来的累计天数,平移到儒略日数 JDN 的标准起点上。

换句话说,前面是在算“某个内部坐标里的连续天数”,最后这个常数负责把它校准到 JDN 系统。

所以整个 JDN 公式的本质是:

日号 = 当月天数 + 月份累计天数 + 平年天数 + 闰年修正 + 起点校准

然后用下面两个公式:

日干序号 = (JDN + 9) mod 10
日支序号 = (JDN + 1) mod 12

这里的 mod 是取余数。

为什么日干要对 10 取余?

因为天干有十个:

甲 乙 丙 丁 戊 己 庚 辛 壬 癸

为什么日支要对 12 取余?

因为地支有十二个:

子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥

干支日每天往后走一位:

今天甲子
明天乙丑
后天丙寅

所以天干每 10 天循环一次,地支每 12 天循环一次,合起来每 60 天回到同一个干支。

这里最容易疑惑的是:

为什么是 +9 和 +1?

答案是:这是为了把 JDN 的连续日号,对齐到干支日的甲子循环。

如果我们规定:

0 = 甲
0 = 子

那么某一天要被算成甲子日,就必须同时满足:

(JDN + 9) mod 10 = 0
(JDN + 1) mod 12 = 0

也就是说,这套公式选择了这样一个对齐方式:

当 JDN 除以 60 余 11 时,这一天就是甲子日。

之后每天 JDN 增加 1,天干序号也增加 1,地支序号也增加 1。

所以:

甲子之后是乙丑
乙丑之后是丙寅
一直到癸亥
然后再回到甲子

因此,+9+1 不是神秘数字,而是“校准常数”。

它们来自我们选定的干支日基准。

如果换一套天干地支编号方式,或者换一个基准甲子日,公式里的常数会跟着变化,但原理不变:

先把日期变成连续日号,
再把连续日号对齐到六十甲子循环。

天干序号按这个表:

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

地支序号按这个表:

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

例如计算公历 2024年2月10日。

用公式得到:

JDN = 2460351

于是:

日干序号 = (2460351 + 9) mod 10 = 0 = 甲
日支序号 = (2460351 + 1) mod 12 = 4 = 辰

所以这一天是:

甲辰日

七、日柱计算要注意子时换日

日柱还有一个容易引起分歧的问题:

子时换日。

子时是:

23点到1点

有些派别认为晚上23点进入子时,就算进入第二天。

也有些排盘方式按现代零点换日。

所以如果出生时间在:

23点到24点之间

日柱可能会因采用的规则不同而不同。

学习时先知道这个问题即可。

真正分析命盘时,要确认自己采用的排盘规则。

八、时的地支怎么定

时支比较容易。

一天分十二时辰,每个时辰约两个小时:

子时:23点到1点
丑时:1点到3点
寅时:3点到5点
卯时:5点到7点
辰时:7点到9点
巳时:9点到11点
午时:11点到13点
未时:13点到15点
申时:15点到17点
酉时:17点到19点
戌时:19点到21点
亥时:21点到23点

比如下午4点出生,就是申时。

但这只确定了时支。

完整时柱还需要时干。

九、时的天干怎么算:五鼠遁

时干由日干推出。

传统口诀叫“五鼠遁”。

“鼠”指子,因为一天十二时辰从子时起。

口诀是:

甲己还加甲
乙庚丙作初
丙辛从戊起
丁壬庚子居
戊癸何方发
壬子是真途

意思是:

甲日、己日:子时从甲子开始
乙日、庚日:子时从丙子开始
丙日、辛日:子时从戊子开始
丁日、壬日:子时从庚子开始
戊日、癸日:子时从壬子开始

然后天干按顺序往后排。

比如日干是癸。

癸属于:

戊癸何方发,壬子是真途

所以癸日的子时是:

壬子时

继续往后排:

子时:壬子
丑时:癸丑
寅时:甲寅
卯时:乙卯
辰时:丙辰
巳时:丁巳
午时:戊午
未时:己未
申时:庚申
酉时:辛酉
戌时:壬戌
亥时:癸亥

所以如果某人是癸日,下午4点出生,下午4点是申时,那么时柱就是:

庚申时

十、时干速查表

可以先记这张表:

日干      子时起点
甲、己    甲子
乙、庚    丙子
丙、辛    戊子
丁、壬    庚子
戊、癸    壬子

后面的丑、寅、卯、辰、巳、午、未、申、酉、戌、亥,顺着天干往后排即可。

比如甲日:

子时:甲子
丑时:乙丑
寅时:丙寅
卯时:丁卯
辰时:戊辰
巳时:己巳
午时:庚午
未时:辛未
申时:壬申
酉时:癸酉
戌时:甲戌
亥时:乙亥

十一、完整例子

假设一个人出生在:

公历 2002年6月24日 16点

先看年柱。

2002年立春之后,年柱为:

壬午年

再看月柱。

6月24日在芒种之后、小暑之前,属于午月。

壬年用“五虎遁”:

丁壬壬寅顺水流

所以:

寅月:壬寅
卯月:癸卯
辰月:甲辰
巳月:乙巳
午月:丙午

月柱是:

丙午月

再看日柱。

用日柱公式计算,公历2002年6月24日的 JDN 为:

2452450

所以:

日干序号 = (2452450 + 9) mod 10 = 9 = 癸
日支序号 = (2452450 + 1) mod 12 = 11 = 亥

日柱是:

癸亥日

最后看时柱。

16点是申时。

癸日用“五鼠遁”:

戊癸何方发,壬子是真途

所以癸日的时辰为:

子时:壬子
丑时:癸丑
寅时:甲寅
卯时:乙卯
辰时:丙辰
巳时:丁巳
午时:戊午
未时:己未
申时:庚申

时柱是:

庚申时

这个例子的完整四柱就是:

壬午年
丙午月
癸亥日
庚申时

写成八字就是:

壬午 丙午 癸亥 庚申

十二、最简记忆法

最后整理成最简单的流程:

第一步:年柱看年份,但以立春为界。
第二步:月支看节气,寅月从立春开始。
第三步:月干用五虎遁,从年干推出寅月天干。
第四步:日柱按六十甲子逐日循环,最好查万年历或用JDN公式。
第五步:时支按出生时辰确定。
第六步:时干用五鼠遁,从日干推出子时天干。

最需要背的两张表是:

五虎遁:用年干定月干。
五鼠遁:用日干定时干。

日柱最不适合死背。

因为它每天都在六十甲子中循环,最好查表或用公式。