分享

公历日干支计算法

 foway 2021-03-17

                         公历日干支计算法


知道公历日期就可以快速计算得到当天的日干支是多少的。

从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

日干支是甲子

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多