forked from warrially/BaziGo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqiyun.go
63 lines (40 loc) · 5.37 KB
/
qiyun.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package bazi
/*
什么是起运
八字中的起运是指命主开始行大运的时候,命学中把把八字看做是命,而把惹人运势看做是运,组合在一起就是命运,以此来断事就是八字算命,起运则说明命主已进入命运之下,可以料断命运了。在命理学上,运分为大运和小运,大运十年一步(十年换一次),小运一年一步,实践证明,“小运”无意义,因此起运都是讲的“大运”。
起大运的方法
总体来说分为阳年和阴年。
阳年者:甲、丙、戊、庚、壬。
阴年者:乙、丁、己、辛、癸。
阳年生男或阴年生女,排运时须顺行,阴年生男或阳年生女,排运时须逆推,其运程的具体排法,以人的生月干支为基准,进行顺排和逆排。首先计算大运的起运岁数,阳年生的男性,阴年生的女性,从本人生日的那天起顺数到下一个节为止,不用中气看共有几天,然后将所数的天数除以3,所得的商即为起运岁数,除不尽者,就按3天等于1年,1天等于4个月,1个时辰等于10天,1个小时等于5天,来计算出实际起运时间。阴年生的男性,阳年生的女性,即从本人生日那天逆数到上一个节为止,看几天,然后除以3,所得商余数即是起运岁数。这里要注意的是节与气在农历1年中有24个节气,每月有1个节1个气。以正月立春,二月惊蛰,三月清明,四月立夏,五月芒种,六月小暑,七月立秋,八月白露,九月寒露,十月立冬,十一月大雪,十二月小寒,这是一年的十二个节。又如正月雨水,二月春分,三月谷雨,四月小满,五月夏至,六月大暑,七月处暑,八月秋分,九月霜降,十月小雪,十一月冬至,十二月大寒算作气,这十二个都称为气,每个月有一个节和一个气,十二个月合起来,共是24个节气。推算八字,要以节来推算,不能用气来推算。原则上起运时间应该从生日那天起,顺数到下一个节止一共有多少日,然后现时除以3,看得多少数,就是几岁起运,这就是起大运之法。推查壬午年的二月二十日酉时是清明节。三朋二十日午时是立夏节,这个命造出生在清明和立夏两个节之间,顺数是立夏,逆数是清明,该男是阳年出生,应该到下一个节。从三月初八日,顺数到三月二十二日立夏节的天数共是否14天。这是可将起运的时间用14除以3,得4余两天,两天等于8个月,得出的结果是4岁零8个月,也就是说,这个男命的起运时间,应该从4岁零8个月看起。
八字中的起运是什么意思
1、大运排法
大运是以“月柱”为基准来排的。大运的排法有顺、逆之分,阳年出生的男命,从月柱开始依次顺排,女命从月柱开始依次逆排;阴年出生的女命从月柱开始依次顺排,男命从月柱开始依次逆排。如命局
甲申,丙寅,癸丑,癸亥。
甲申年为阳年,如果是男命,大运从月柱的下一组干支开始往下顺排,依次为:
丁卯,戊辰,己巳,庚午,辛未……
如果是女命,大运从月柱的上一组干支开始往上逆排,依次为:
乙丑,甲子,癸亥,壬戌,辛酉……
2、起运数
排出大运以后,还要知道从什么时候开始“行”大运,计算从何时开始行大运的过程,叫作起运数。起运数也有阳年生人男顺女逆、阴年生人女顺男逆的规律。阳年出生的男命,从出生的时辰开始往下顺数到换月的“节令”,看有几天、几个时辰;女命,从出生的时辰开始往上逆数到换月的“节令”,看有几天、几个时辰,然后按照三天折合一年、一天折合四个月、一个时辰折天、一个小时折合五天进行计算,得出具体的起运数。
3、排出此人一生的运程
根据阳年生男顺排的原则,即从出生月的下一个干支排起,顺行而排,一般都排八步大运。生月为甲辰月,甲辰后面的干支为乙巳故从五岁起运为“乙巳”,往下排,每一管辖十年,所以15岁为丙午……
5岁,15岁,25岁,35岁,45岁,55岁,65岁,75岁。
乙巳,丙午,丁未,戊申,己酉,庚戊,辛亥,壬子。
将大运排好后,以日柱天干为标准主,写上四柱天干和地支藏干之六亲,即阴干见阳干,阳干见阴干为正,阴干见阴干,阳干见阳二为偏,然后根据四柱中的排列组合,结合每一步大运的天干地支判断吉凶。
*/
// NewQiYun 起运时间
func NewQiYun(isShunNi bool, dtPreviousJie *TSolarDate, dtNextJie *TSolarDate, dtSolarDate *TSolarDate) *TSolarDate {
var nDiffSeconds int64 // 差异的秒数
if isShunNi {
// 顺推找下一个节
nDiffSeconds = dtSolarDate.GetDiffSeconds(dtNextJie)
} else {
// 逆推找上一个节
nDiffSeconds = dtPreviousJie.GetDiffSeconds(dtSolarDate)
}
// 大运起运时间的计算方法,
// 是以出生之日所在月令,按男女顺逆方法推算到下一个节或者上一个节,记下日数。然后按三天为一年,一天为四个月,一个时辰为十天来折算,加上出生时间就是起运的时间。
nDiffSeconds *= 120
return NewSolarDateFrom64TimeStamp(dtSolarDate.Get64TimeStamp() + nDiffSeconds)
}