公历日干支计算法
公历日干支计算法
知道公历日期就可以快速计算得到当天的日干支是多少的。
从1601年起被4除尽的是闰年,整百被400除尽是闰年,
公元1601年1月1日干支是丁卯 卯1丁1顺
天干丁1戊2己3庚4辛5壬6癸7甲8乙9丙10
地支卯1辰2巳3午4未5申6酉7戌8亥9子10丑11寅12
注意10,12是除尽无余数
干支基数=5*(y-1601)+(y-1601)/4-(y-1601)/100+(y-1601)/400+r
y是1601年起的所求年数
r是所求日是从当年的1月1日起的总天数
用所得的干支基数与10相除求余数从丁1戊2...丙10得天干
用所得的干支基数与12相除求余数从卯1辰2...寅12得地支
比如2000年12月31日干支是多少?
5*(2000-1601)+(2000-1601)/4-(2000-1601)/100+(2000-1601)/400+366
=5*399+99-3+0+366
=2457
2457%10=7 癸
2457%12=9 亥
比如2001年3月7日干支是多少?
5*(2001-1601)+(2001-1601)/4-(2001-1601)/100+(2001-1601)/400+31+28+7
=2163
2163%10=3 己
2163%12=3 巳
比如2021年3月17日干支是多少?
5*(2021-1601)+(2021-1601)/4-(2021-1601)/100+(2021-1601)/400+31+28+17
=5*420+420/4-420/100+420/400+31+28+17
=5*420+105-4+1+31+28+17
=2278
2278%10=8 甲
2278%12=10 子
公元5年到公元1600年,是每四年闰一日在2月
干支基数为=5*(y-5)+(y-5)/4+r
y是5年起的所求年数
r是所求日是从当年的1月1日起的总天数
用所得的干支基数与10相除求余数从戊1己2...丁10得天干
用所得的干支基数与12相除求余数从戌1亥2...酉12得地支
比如1200年3月4日干支是多少?
5*(1200-5)+(1200-5)/4+31+29+4
=6337
6337%10=7 甲
6337%12=1 戌
公元5年之前的历法在现代的历书中与实际的有出入。
干支基数公式暂时不提供。
对应在没有万年历或无法翻阅万年历的时候,掌握公历日干支计算得到日干支是有一定帮助作用的。
比如某人报说他高祖出生于公历1901年3月26日丑时
不用翻历书就可以自动得出四柱对应的干支是多少的:
庚0辛1...戊8己9得1901是辛年
(1901-3)%12 余2 子1丑2...戌11亥12 得1901是丑年
1901就是辛丑年
3月26日在惊蛰和清明之间是卯月,丙辛遁月从庚寅起,卯月是辛卯
3月26日干支基数是=5*(1901-1601)+(1901-1601)/4-(1901-1601)/100+(1901-1601)/400+31+28+26=1500+75-3+0+31+28+26=1657
1657%10=7 丁1戊2...癸7 得日天干是癸
1657%12=1 卯1辰2... 得日地支是卯
3月26日时癸卯 戊癸遁时从壬子起,丑时是癸丑
也就是高祖1901年3月26日丑时 对应的干支时间就是 辛丑年辛卯月癸卯日癸丑时 天干地支连珠格
这样就不用翻历书就得到干支相关的信息了。
附之前掌握的日干支计算公式
日干支公式
G = 4C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d - 3
Z = 8C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d + 7 + i
c是世纪减一,y是年后两位,M是月,d是日,奇数月i为0偶数月i为6
1和2月使用13,14来代替,因此C和y也要按上一年的年份来取值.
[]表示取整数
甲0子0顺
1720年5月6日
4*17+[17 / 4] + 5*20 + [20 / 4] + [3 * (5 + 1) / 5] + 6 - 3 = 3
8*17+[17/4]+5*20+[20/4]+[3*(5+1)/5]+6+7+0=9
日干支就是丙申
1720年5月26日
4*17+[17/4]+5*20+[20/4]+[3*(5+1)/5]+26-3 = 3
8*17+[17/4]+5*20+[20/4]+[3*(5+1)/5]+26+7+0= 5
日干支就是丙辰
1981年5月6日
4*19+[19/4]+5*81+[81/4]+[3*(5+1)/5]+6-3 = 1
8*19+[19/4]+5*81+[81/4]+[3*(5+1)/5]+6+7+0= 9
日干支就是甲申
2009年3月14日
4*20+[20/4]+5*9+[9/4]+[3*(3+1)/5]+14-3 = 5
8*20+[20/4]+5*9+[9/4]+[3*(3+1)/5]+14+7+0= 7
日干支是戊午
2020年2月14日
4*20+[20/4]+5*19+[19/4]+[3*(14+1)/5]+14-3 = 4
8*20+[20/4]+5*19+[19/4]+[3*(14+1)/5]+14+7+6= 0
日干支是丁亥
也可以用如下公式来计算
乘五除四基加日
双月应需加三十
一二自加闰少一
经几大月多加几
一月不算在大月
平一加一闰不加
平二加二闰加一
三不加四五加一
六七加二八加三
九十加四余加五
一月不计算在大月内,一月加一,二月加二,闰年一月不加,二月加一
三月不加,四五月加一,六七月加二,八月加三,
九十月加四,十一十二加五
双月多加三十
1800-1899 基数25
1900-1999 基数9
2000-2099 基数54
2100-2199 基数39
1802年1月10日
2*5+2/4+25+10=45
45+1=46
46-10=6
46-12=10
日干支是己酉
2012年1月10日
12*5+12/4+54+10=7
日干支是庚午
1802年5月6日
2*5+2/4+25+6=41
41+1=42
42-10=2
42-12=6
日干支是乙巳
1802年9月6日
2*5+2/4+25+6=41
41+4=45
45-10=5
45-12=9
日干支是戊申
也可以用如下公式来计算
1900----1999年日干支基数=(年尾二位数+3)×5+55+(年尾二位数-1)/4
2000----2099年日干支基数=(年尾二位数+7)×5+15+(年尾二位数+19)/4(只用商数,余数不用,数过60就去掉60)。
2100----2199年日干支基数=(年尾二位数+11)*5+39+(年尾二位数+20)/4
然后用得到日干支基数+所求日的所有天数
1981年5月6日
((81+3)*5+55+(81-1)/4)=15
15+31+28+31+30+6=21
21-10=1
21-12=9
日干支是甲申
2009年3月14日
((9+7)*5+15+(9+19)/4)=42
42+31+28+14=55
55-10=5
55-12=7
日干支是戊午
2020年2月14日
((20+7)*5+15+(20+19)/4)=39
39+31+14=24
24-10=4
24-12=0
日干支是丁亥
2020年3月8日
((20+7)*5+15+(20+19)/4)=39
39+31+29+8=47
47-10=7
47-12=11
日干支是庚戌
2101-5-6
((1+11)*5+39+(1+20)/4)=44
44+31+28+31+30+6=50
50-10=10
50-12=2
日干支是癸丑
2101-5-26
((1+11)*5+39+(1+20)/4)=44
44+31+28+31+30+26=10
10-10=0
10-12=10
日干支是癸酉
2102-3-8
((2+11)*5+39+(2+20)/4)=49
49+31+28+8=56
56-10=6
56-10=8
日干支是己未
2111-5-6
((11+11)*5+39+(11+20)/4)=36
36+31+28+31+30+6=42
42-10=2
42-12=6
日干支是乙巳
2112-3-8
((12+11)*5+39+(12+20)/4)=42
42+31+29+8=50
50-10=0
50-12=2
日干支是癸丑
2130-2-14
((30+11)*5+39+(30+20)/4)=16
16+31+14=1
日干支是甲子