30 June 2007
公农历转换的VB代码
注:该代码的原创者已不可考,故我在这里贴出的代码中没有包含原作者的信息。但此段代码无疑有原作者很大的一部分功劳,对此表示感谢!
'公历转农历模块
'原创:互联网
'修正:阿勇 2005/1/12
'// 农历数据定义 //
'先以 H2B 函数还原成长度为 18 的字符串,其定义如下:
'前12个字节代表1-12月:1为大月,0为小月;压缩成十六进制(1-3位)
'第13位为闰月的情况,1为大月30天,0为小月29天;(4位)
'第14位为闰月的月份,如果不是闰月为0,否则给出月份(5位)
'最后4位为当年农历新年的公历日期,如0131代表1月31日;当作数值转十六进制(6-7位)
'农历常量(1899~2100,共202年)
Private Const ylData = "AB500D2,4BD0883," _
& "4AE00DB,A5700D0,54D0581,D2600D8,D9500CC,655147D,56A00D5,9AD00CA,55D027A,4AE00D2," _
& "A5B0682,A4D00DA,D2500CE,D25157E,B5500D6,56A00CC,ADA027B,95B00D3,49717C9,49B00DC," _
& "A4B00D0,B4B0580,6A500D8,6D400CD,AB5147C,2B600D5,95700CA,52F027B,49700D2,6560682," _
& "D4A00D9,EA500CE,6A9157E,5AD00D6,2B600CC,86E137C,92E00D3,C8D1783,C9500DB,D4A00D0," _
& "D8A167F,B5500D7,56A00CD,A5B147D,25D00D5,92D00CA,D2B027A,A9500D2,B550781,6CA00D9," _
& "B5500CE,535157F,4DA00D6,A5B00CB,457037C,52B00D4,A9A0883,E9500DA,6AA00D0,AEA0680," _
& "AB500D7,4B600CD,AAE047D,A5700D5,52600CA,F260379,D9500D1,5B50782,56A00D9,96D00CE," _
& "4DD057F,4AD00D7,A4D00CB,D4D047B,D2500D3,D550883,B5400DA,B6A00CF,95A1680,95B00D8," _
& "49B00CD,A97047D,A4B00D5,B270ACA,6A500DC,6D400D1,AF40681,AB600D9,93700CE,4AF057F," _
& "49700D7,64B00CC,74A037B,EA500D2,6B50883,5AC00DB,AB600CF,96D0580,92E00D8,C9600CD," _
& "D95047C,D4A00D4,DA500C9,755027A,56A00D1,ABB0781,25D00DA,92D00CF,CAB057E,A9500D6," _
& "B4A00CB,BAA047B,B5500D2,55D0983,4BA00DB,A5B00D0,5171680,52B00D8,A9300CD,795047D," _
& "6AA00D4,AD500C9,5B5027A,4B600D2,96E0681,A4E00D9,D2600CE,EA6057E,D5300D5,5AA00CB," _
& "76A037B,96D00D3,4AB0B83,4AD00DB,A4D00D0,D0B1680,D2500D7,D5200CC,DD4057C,B5A00D4," _
& "56D00C9,55B027A,49B00D2,A570782,A4B00D9,AA500CE,B25157E,6D200D6,ADA00CA,4B6137B," _
& "93700D3,49F08C9,49700DB,64B00D0,68A1680,EA500D7,6AA00CC,A6C147C,AAE00D4,92E00CA," _
& "D2E0379,C9600D1,D550781,D4A00D9,DA400CD,5D5057E,56A00D6,A6C00CB,55D047B,52D00D3," _
& "A9B0883,A9500DB,B4A00CF,B6A067F,AD500D7,55A00CD,ABA047C,A5A00D4,52B00CA,B27037A," _
& "69300D1,7330781,6AA00D9,AD500CE,4B5157E,4B600D6,A5700CB,54E047C,D1600D2,E960882," _
& "D5200DA,DAA00CF,6AA167F,56D00D7,4AE00CD,A9D047D,A2D00D4,D1500C9,F250279,D5200D1"
Private Const ylMd0 = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五" _
& "十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十 "
Private Const ylMn0 = "正二三四五六七八九十冬腊"
Private Const ylTianGan0 = "甲乙丙丁戊已庚辛壬癸"
Private Const ylDiZhi0 = "子丑寅卯辰巳午未申酉戌亥"
Private Const ylShu0 = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
'公历日期转农历
Function GetYLDate(ByVal strDate As String) As String
On Error GoTo aErr
If Not IsDate(strDate) Then Exit Function
Dim setDate As Date, tYear As Integer, tMonth As Integer, tDay As Integer
setDate = CDate(strDate)
tYear = Year(setDate): tMonth = Month(setDate): tDay = Day(setDate)
'如果不是有效有日期,退出
If tYear > 2100 Or tYear < 1900 Then Exit Function
Dim daList() As String * 18, conDate As Date, thisMonths As String
Dim AddYear As Integer, AddMonth As Integer, AddDay As Integer, getDay As Integer
Dim YLyear As String, YLShuXing As String
Dim dd0 As String, mm0 As String, ganzhi(0 To 59) As String * 2
Dim RunYue As Boolean, RunYue1 As Integer, mDays As Integer, i As Integer
'加载2年内的农历数据
ReDim daList(tYear - 1 To tYear)
daList(tYear - 1) = H2B(Mid(ylData, (tYear - 1900) * 8 + 1, 7))
daList(tYear) = H2B(Mid(ylData, (tYear - 1900 + 1) * 8 + 1, 7))
AddYear = tYear
initYL:
AddMonth = CInt(Mid(daList(AddYear), 15, 2))
AddDay = CInt(Mid(daList(AddYear), 17, 2))
conDate = DateSerial(AddYear, AddMonth, AddDay) '农历新年日期
getDay = DateDiff("d", conDate, setDate) + 1 '相差天数
If getDay < 1 Then AddYear = AddYear - 1: GoTo initYL
thisMonths = Left(daList(AddYear), 14)
RunYue1 = Val("&H" & Right(thisMonths, 1)) '闰月月份
If RunYue1 > 0 Then '有闰月
thisMonths = Left(thisMonths, RunYue1) & Mid(thisMonths, 13, 1) & Mid(thisMonths, RunYue1 + 1)
End If
thisMonths = Left(thisMonths, 13)
For i = 1 To 13 '计算天数
mDays = 29 + CInt(Mid(thisMonths, i, 1))
If getDay > mDays Then
getDay = getDay - mDays
Else
If RunYue1 > 0 Then
If i = RunYue1 + 1 Then RunYue = True
If i > RunYue1 Then i = i - 1
End If
AddMonth = i
AddDay = getDay
Exit For
End If
Next
dd0 = Mid(ylMd0, (AddDay - 1) * 2 + 1, 2)
mm0 = Mid(ylMn0, AddMonth, 1) + "月"
For i = 0 To 59
ganzhi(i) = Mid(ylTianGan0, (i Mod 10) + 1, 1) + Mid(ylDiZhi0, (i Mod 12) + 1, 1)
Next i
YLyear = ganzhi((AddYear - 4) Mod 60)
YLShuXing = Mid(ylShu0, ((AddYear - 4) Mod 12) + 1, 1)
If RunYue Then mm0 = "闰" & mm0
GetYLDate = "农历" & YLyear & "(" & YLShuXing & ")年" & mm0 & dd0
aErr:
End Function
'农历转公历日期
'secondMonth 为真,则天示当 tMonth 是闰月时,取第二个月
Function GetDate(ByVal tYear As Integer, tMonth As Integer, tDay As Integer, Optional secondMonth As Boolean = False) As String
On Error GoTo aErr
If tYear > 2100 Or tYear < 1899 Or tMonth > 12 Or tMonth < 1 Or tDay > 30 Or tDay < 1 Then Exit Function
Dim thisMonths As String, ylNewYear As Date, toMonth As Integer
Dim mDays As Integer, RunYue1 As Integer, i As Integer
thisMonths = H2B(Mid(ylData, (tYear - 1899) * 8 + 1, 7))
If tDay > 29 + CInt(Mid(thisMonths, tMonth, 1)) Then Exit Function
ylNewYear = DateSerial(tYear, CInt(Mid(thisMonths, 15, 2)), CInt(Mid(thisMonths, 17, 2))) '农历新年日期
thisMonths = Left(thisMonths, 14)
RunYue1 = Val("&H" & Right(thisMonths, 1)) '闰月月份
toMonth = tMonth - 1
If RunYue1 > 0 Then '有闰月
thisMonths = Left(thisMonths, RunYue1) & Mid(thisMonths, 13, 1) & Mid(thisMonths, RunYue1 + 1)
If tMonth > RunYue1 Or (secondMonth And tMonth = RunYue1) Then toMonth = tMonth
End If
thisMonths = Left(thisMonths, 13)
mDays = 0
For i = 1 To toMonth
mDays = mDays + 29 + CInt(Mid(thisMonths, i, 1))
Next
mDays = mDays + tDay
GetDate = ylNewYear + mDays - 1
aErr:
End Function
'将压缩的阴历字符还原
Private Function H2B(ByVal strHex As String) As String
Dim i As Integer, i1 As Integer, tmpV As String
Const hStr = "0123456789ABCDEF"
Const bStr = "0000000100100011010001010110011110001001101010111100110111101111"
tmpV = UCase(Left(strHex, 3))
'十六进制转二进制
For i = 1 To Len(tmpV)
i1 = InStr(hStr, Mid(tmpV, i, 1))
H2B = H2B & Mid(bStr, (i1 - 1) * 4 + 1, 4)
Next
H2B = H2B & Mid(strHex, 4, 2)
'十六进制转十进制
H2B = H2B & "0" & CStr(Val("&H" & Right(strHex, 2)))
End Function
《附录:从网上找到的原代码》
'下面是一个关于VB的农历算法
'// 日期数据定义方法如下 //
'前12个字节代表1-12月为大月或是小月,1为大月30天,0为小月29天;
'第13位为闰月的情况,1为大月30天,0为小月29天;
'第14位为闰月的月份,如果不是闰月为0,否则给出月份(10、11、12分别用A、B、C来表示);
'最后4位为当年家农历新年-即农历1月1日所在公历的日期,如0131代表1月31日
Function GetYLDate(tYear As Integer, tMonth As Integer, tDay As Integer, YLyear As String, YLShuXing As String, Optional IsGetGl As Boolean) As String
'tYear为要输入的年,tMonth为月,tDay为日期;
'YLyear是返回值,返回农历的年份,如甲子年;
'YLShuXing返回的是属象,如鼠;
'IsGetGl是设置是不是通过农历取公历值,如果是前三个返回相应的公历日期,而且返回值是一个公历日期。
On Error Resume Next
Dim daList(1900 To 2011) As String * 18
Dim conDate As Date, setDate As Date
Dim AddMonth As Integer, AddDay As Integer, AddYear As Integer, getDay As Integer
Dim RunYue As Boolean
If tYear > 2010 Or tYear < 1901 Then Exit Function '如果不是有效有日期,退出
'1900 to 2011
daList(1900) = "010010110110180131"
daList(1901) = "010010101110000219"
daList(1902) = "101001010111000208"
daList(1903) = "010100100110150129"
daList(1904) = "110100100110000216"
daList(1905) = "110110010101000204"
daList(1906) = "011010101010140125"
daList(1907) = "010101101010000213"
daList(1908) = "100110101101000202"
daList(1909) = "010010101110120122"
daList(1910) = "010010101110000210"
daList(1911) = "101001001101160130"
daList(1912) = "101001001101000218"
daList(1913) = "110100100101000206"
daList(1914) = "110101010100150126"
daList(1915) = "101101010101000214"
daList(1916) = "010101101010000204"
daList(1917) = "100101101101020123"
daList(1918) = "100101011011000211"
daList(1919) = "010010011011170201"
daList(1920) = "010010011011000220"
daList(1921) = "101001001011000208"
daList(1922) = "101100100101150128"
daList(1923) = "011010100101000216"
daList(1924) = "011011010100000205"
daList(1925) = "101011011010140124"
daList(1926) = "001010110110000213"
daList(1927) = "100101010111000202"
daList(1928) = "010010010111120123"
daList(1929) = "010010010111000210"
daList(1930) = "011001001011060130"
daList(1931) = "110101001010000217"
daList(1932) = "111010100101000206"
daList(1933) = "011011010100150126"
daList(1934) = "010110101101000214"
daList(1935) = "001010110110000204"
daList(1936) = "100100110111030124"
daList(1937) = "100100101110000211"
daList(1938) = "110010010110170131"
daList(1939) = "110010010101000219"
daList(1940) = "110101001010000208"
daList(1941) = "110110100101060127"
daList(1942) = "101101010101000215"
daList(1943) = "010101101010000205"
daList(1944) = "101010101101140125"
daList(1945) = "001001011101000213"
daList(1946) = "100100101101000202"
daList(1947) = "110010010101120122"
daList(1948) = "101010010101000210"
daList(1949) = "101101001010170129"
daList(1950) = "011011001010000217"
daList(1951) = "101101010101000206"
daList(1952) = "010101011010150127"
daList(1953) = "010011011010000214"
daList(1954) = "101001011011000203"
daList(1955) = "010100101011130124"
daList(1956) = "010100101011000212"
daList(1957) = "101010010101080131"
daList(1958) = "111010010101000218"
daList(1959) = "011010101010000208"
daList(1960) = "101011010101060128"
daList(1961) = "101010110101000215"
daList(1962) = "010010110110000205"
daList(1963) = "101001010111040125"
daList(1964) = "101001010111000213"
daList(1965) = "010100100110000202"
daList(1966) = "111010010011030121"
daList(1967) = "110110010101000209"
daList(1968) = "010110101010170130"
daList(1969) = "010101101010000217"
daList(1970) = "100101101101000206"
daList(1971) = "010010101110150127"
daList(1972) = "010010101101000215"
daList(1973) = "101001001101000203"
daList(1974) = "110100100110140123"
daList(1975) = "110100100101000211"
daList(1976) = "110101010010180131"
daList(1977) = "101101010100000218"
daList(1978) = "101101101010000207"
daList(1979) = "100101101101060128"
daList(1980) = "100101011011000216"
daList(1981) = "010010011011000205"
daList(1982) = "101001001011140125"
daList(1983) = "101001001011000213"
daList(1984) = "1011001001011A0202"
daList(1985) = "011010100101000220"
daList(1986) = "011011010100000209"
daList(1987) = "101011011010060129"
daList(1988) = "101010110110000217"
daList(1989) = "100100110111000206"
daList(1990) = "010010010111150127"
daList(1991) = "010010010111000215"
daList(1992) = "011001001011000204"
daList(1993) = "011010100101030123"
daList(1994) = "111010100101000210"
daList(1995) = "011010110010180131"
daList(1996) = "010110101100000219"
daList(1997) = "101010110110000207"
daList(1998) = "100100110110150128"
daList(1999) = "100100101110000216"
daList(2000) = "110010010110000205"
daList(2001) = "110101001010140124"
daList(2002) = "110101001010000212"
daList(2003) = "110110100101000201"
daList(2004) = "010110101010120122"
daList(2005) = "010101101010000209"
daList(2006) = "101010101101170129"
daList(2007) = "001001011101000218"
daList(2008) = "100100101101000207"
daList(2009) = "110010010101150126"
daList(2010) = "101010010101000214"
daList(2011) = "101101001010000214"
AddYear = tYear
RunYue = False
If IsGetGl Then
AddMonth = Val(Mid(daList(AddYear), 15, 2))
AddDay = Val(Mid(daList(AddYear), 17, 2))
conDate = DateSerial(AddYear, AddMonth, AddDay)
AddDay = tDay
For i = 1 To tMonth - 1
AddDay = AddDay + 29 + Val(Mid(daList(tYear), i, 1))
Next i
setDate = DateAdd("d", AddDay - 1, conDate)
GetYLDate = setDate
tYear = Year(setDate)
tMonth = Month(setDate)
tDay = Day(setDate)
Exit Function
End If
CHUSHIHUA:
AddMonth = Val(Mid(daList(AddYear), 15, 2))
AddDay = Val(Mid(daList(AddYear), 17, 2))
conDate = DateSerial(AddYear, AddMonth, AddDay)
setDate = DateSerial(tYear, tMonth, tDay)
getDay = DateDiff("d", conDate, setDate)
If getDay < 0 Then AddYear = AddYear - 1: GoTo CHUSHIHUA
' addday = NearDay
AddDay = 1: AddMonth = 1
For i = 1 To getDay
AddDay = AddDay + 1
If AddDay = 30 + Mid(daList(AddYear), AddMonth, 1) Or (RunYue And AddDay = 30 + Mid(daList(AddYear), 13, 1)) Then
If RunYue = False And AddMonth = Val("&H" & Mid(daList(AddYear), 14, 1)) Then
RunYue = True
Else
RunYue = False
AddMonth = AddMonth + 1
End If
AddDay = 1
End If
Next
md$ = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十"
dd$ = Mid(md$, (AddDay - 1) * 2 + 1, 2)
mm$ = Mid("正二三四五六七八九十寒腊", AddMonth, 1) + "月"
YouGetDate = DateSerial(AddYear, AddMonth, AddDay)
tiangan$ = "甲乙丙丁戊已庚辛壬癸"
dizhi$ = "子丑寅卯辰巳午未申酉戌亥"
Dim ganzhi(0 To 59) As String * 2
For i = 0 To 59
ganzhi(i) = Mid(tiangan$, (i Mod 10) + 1, 1) + Mid(dizhi$, (i Mod 12) + 1, 1)
'ff$ = ff$ + ganzhi(i)
Next i
'MsgBox ff$, , Len(ff$)
YLyear = ganzhi((AddYear - 4) Mod 60)
shu$ = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
YLShuXing = Mid(shu$, ((AddYear - 4) Mod 12) + 1, 1)
If RunYue Then mm$ = "闰" + mm$
GetYLDate = mm$ + dd$
End Function
'下面是一个使用的例子,你需要在窗体上加上一个按扭,并命名为Command1,然后将下列代码复制到窗体的代码中
Private Sub Command1_Click()
Dim ty As Integer, tm As Integer, td As Integer, yl As String, sx As String
'取公历1999年10月28日的农历日期
ty = 1999
tm = 10
td = 28
t = GetYLDate(ty, tm, td, yl, sx)
MsgBox t
MsgBox ty & "-" & tm & "-" & td & " " & yl & " " & sx
'取1999年农历十月28的公历日期
t = GetYLDate(ty, tm, td, yl, sx, True)
MsgBox t
MsgBox ty & "-" & tm & "-" & td & " " & yl & " " & sx
End Sub
万年历查询
content="农历; 阳历; 月历; 节日; 时区; 节气; 八字; 干支; 生肖; gregorian solar; chinese lunar; calendar;"
name=keywords>
name=description>
快排八字N
©緣生術數研究社 -- 術數研究 L \fpfhLp
將欲求的陽歷公元年份除以60的余數減3,便得該年農歷的干支序列號。假使干支序號數是小於、等於零,則干支序號數加60。4ZH
©緣生術數研究社 -- 術數研究 A y(
例 如:公元1991年的農歷干支年紀:1991/60=33余11。干支序列號=11-3=8。在干支表中8對應的是辛末年。又如:求公元1983年的農歷 干支紀年,1983/60=33余3,干支序號=3-3=0,當小於或等於零時加60,干支表序號60為癸亥年!看到這,有些易友可能會說了:“我背不成 60甲子對應的序號怎麼辦?”其實很簡單,根本不要背,還是上面的基本法則,仍以上面的為例:公元1991年的農歷干支年紀:1991/60=33余 11,11-3=8,天干順數第8就是辛;地支順數到8就是未,所以該年為辛未;再舉個例子,公元1974年的農歷干支紀年,1974/60結果余54, 54-3=51,天干10個一輪回,所以此年天干為第一個,是甲,地支12一輪回,所以此年地支為第三,是寅(51/12余3)。gTij
©緣生術數研究社 -- 術數研究 =lr}~
再來說說如何用公元年份推算該年農歷月紀:wQT]LLjwpO
©緣生術數研究社 -- 術數研究 >z6*{M|K
農 歷月紀的地支是固定的,即十一月(子)、十二月(醜)、正月(寅)...十月(亥)。農歷月紀天干的計算是:首先推算該年農歷正月的天干,其余月份可按天 干順序號類推。某年正月的天干序號的計算為:取該年公歷年份除以5的余數減2後乘以2再減1。當該數為負數時加10。閏年的紀年干支同前一月。:&5k~fP\G
©緣生術數研究社 -- 術數研究 _PN&1iy9
例如:求公元1991(農歷辛未年)正月的天干:1991/5=398余1,正月的天干序號數=(1-2)*2-1=-3,因該數是負數,所以加10得7,即農歷辛未年正月天干為庚,正月干支為庚寅,二月為辛卯、三月為壬辰,余類推。P/kSJ`<@
©緣生術數研究社 -- 術數研究 0#cKQD*HDb;
最關鍵的是如何推算日期干支了:8(O9pc)6s
©緣生術數研究社 -- 術數研究 {OV}*)Z'
大 家肯定看到各種命理書上有介紹如何用口訣推四柱八字,有什麼“五虎遁年起月訣”、“作鼠遁日起時訣”雲雲,可是一說到如何起日法,就用“查萬年歷”一筆帶 過,既然日要查萬年歷,那介紹推月、時的口訣不是很多余嗎?我用萬年歷查日卻用口訣推月、時不是很傻嗎?好了,廢話不多說,介紹方法先。不過醜話說前頭, 這方法比較麻煩,要背的。首先你要背出每年陽歷1月1日的干支,聽到這大家可能要厥倒了,不要緊,可以少背一點阿,我就只背了70--85年的每年陽歷第 一天的干支,畢竟網上算命的人都在這個年齡段,當然,如果你記性好,可以多背點,其實多算多運用此方法自然能記得的。方法很簡單:將欲求的公歷日期減去1 月1日再加上其對應的干支表中的序號數,便得欲求的公歷日期的干支序號。當干支序號大於60時則減60。比如求公歷1973年的4月26日的干支,因為 1973年陽歷1月1日的干支是丁酉,丁酉在干支表中的序號是34,將4月26日減1月1日加34得115+34=149(注意在計算天數的時候是算頭不 算尾,算尾不算頭),149大於60,所以149-60-60=29,干支表中29對應的干支是壬辰!如果你背不出序號的對應干支,其實有個竅門,比如 29,天干10位一輪回,29的天干就是29-10-10=9,即壬;地支12位一輪回,29-24=5,所以是辰!EWDU
©緣生術數研究社 -- 術數研究 +@tKQj.
最後說農歷時紀的推算:cg7e/\z
©緣生術數研究社 -- 術數研究 B^s02_
農 歷時紀的地支是固定的,如23-1時為子。時紀天干的計算是,首先推算出子時時辰的天干,其余按天干順序類推。子時時辰天干序號數的計算是:取當天日紀天 干序號數(當序號數大於5時則減5)乘以2減1。例如求壬辰日子時天干:日紀天干壬序號數是9,子時天干序號數=(9-5)*2-1=7,故子時時紀是庚 子,醜時為辛醜....azG;S(
起算四柱八字大運 練習三
起算四柱八字大運 練習三
<月令與節對照表>
| 月令 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 | 子 | 丑 |
| 節 | 立春 | 驚蟄 | 清明 | 立夏 | 芒種 | 小暑 | 立秋 | 白露 | 寒露 | 立冬 | 大雪 | 小寒 |
<案例21:西元1970年12月16日 上午4時45分出生(陽曆), Q女。>
查萬年曆得知,Q女的農曆為庚戌年十一月十八日寅時,已過了十一月的節大雪,所以月柱為戊子,Q女的四柱八字為
時 日 月 年
戊 庚 戊 庚---陽女,逆時推算
寅 午 子 戌
Q女的大運如何起算?月柱為戊子,陽女要逆推到上個節立冬,是十月十日寅時4點20分,計算結果為38日25分,換算成起算大運的時間為12歲8個月,以虛歲13歲起運,但是起算大運的慣例很少超過11歲,所以,我們以3歲起算Q女的大運。她的四柱八字及大運如下:
時 日 月 年
戊 庚 戊 庚---陽女,逆時推算
寅 午 子 戌
| 113 | 103 | 93 | 83 | 73 | 63 | 53 | 43 | 33 | 23 | 13 | 3 | 大 運 |
| 丙 | 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 | 甲 | 乙 | 丙 | 丁 | |
| 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 |
<案例22:西元1979年5月8日 下午17時28分出生(陽曆), R男。>
查萬年曆得知,R男的農曆為己未年四月十三日酉時,已過四月的節立夏,所以月柱為己巳,R男的四柱八字為
時 日 月 年
乙 乙 己 己---陰男,逆時推算
酉 亥 巳 未
R男的大運如何推算呢?月柱為己巳,四月的節為立夏,陰男為逆時針推算到上個節清明,是三月九日酉時17時18分,計算結果為33日10分,換算起大運的時間為11歲。
R男的四柱八字及大運為
時 日 月 年
乙 乙 己 己---陰男,逆時推算
酉 亥 巳 未
| 121 | 111 | 101 | 91 | 81 | 71 | 61 | 51 | 41 | 31 | 21 | 11 | 大 運 |
| 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 | 甲 | 乙 | 丙 | 丁 | 戊 | |
| 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 | 子 | 丑 | 寅 | 卯 | 辰 |
<案例23:西元1979年6月15日 下午13時28分出生(陽曆), S女。>
查萬年曆得知,S女的農曆為己未年五月廿一日未時,已經過了五月的節芒種,月柱為庚午,S女的四柱八字為
時 日 月 年
己 戊 庚 己---陰女,順時推算
未 子 午 未
S女的大運如何推算?S女的月柱為庚午,五月的節芒種,陰女順時推算到下個節為小暑,是六月十五日丑時1點25分,計算結果為22日11小時57分,換算大運的起算時間為7歲5個月20天,以虛歲8歲開始起算大運。
S女的四柱八字及大運為
時 日 月 年
己 戊 庚 己---陰女,順時推算
未 子 午 未
| 118 | 108 | 98 | 88 | 78 | 68 | 58 | 48 | 38 | 28 | 18 | 8 | 大 運 |
| 庚 | 己 | 戊 | 丁 | 丙 | 乙 | 甲 | 癸 | 壬 | 辛 | 庚 | 己 | |
| 子 | 亥 | 戌 | 酉 | 申 | 未 | 午 | 巳 | 辰 | 卯 | 寅 | 丑 |
<案例24:西元1956年8月23日 上午2時28分出生(陽曆), T男。>
查萬年曆得知,這年有實施日光節約時間,所以T男的出生間要先扣除1小時,為1點28分,農曆為丙申年七月十八日丑時,月柱為丙申,那T男的四柱八字為
時 日 月 年
辛 壬 丙 丙---陽男,順時推算
丑 戌 申 申
T男的大運如何推算?他的月柱為丙申,七月的節為立秋,陽男順時針推算到下個節為白露,是八月四日子時0點20分,計算結果為15日22小時52分,換算成起算大運的時間為5歲3個月20天,以虛歲6歲開始起算大運。T男的四柱八字及大運如下:
時 日 月 年
辛 壬 丙 丙---陽男,順時推算
丑 戌 申 申
| 116 | 106 | 96 | 86 | 76 | 66 | 56 | 46 | 36 | 26 | 16 | 6 | 大 運 |
| 戊 | 丁 | 丙 | 乙 | 甲 | 癸 | 壬 | 辛 | 庚 | 己 | 戊 | 丁 | |
| 申 | 未 | 午 | 巳 | 辰 | 卯 | 寅 | 丑 | 子 | 亥 | 戌 | 酉 |
<案例25:西元1957年1月8日 上午11時28分出生(陽曆), U女。>
查萬年曆得知,U女的農曆為丙申年十二月八日午時,已過十二月的節為小寒,所以,月柱為辛丑,那U女的四柱八字為
時 日 月 年
壬 庚 辛 丙---陽女,逆時推算
午 辰 丑 申
那U女的大運如何起算?月柱丑所在節為小寒,陽女應逆時針推算到上個節大雪,是十一月六日午時11時3分,計算結果為32日25分,換算成起大運的時間為10歲8個月,以虛歲11歲開始起算大運。
U女的四柱八字及大運為:
時 日 月 年
壬 庚 辛 丙---陽女,逆時推算
午 辰 丑 申
| 121 | 111 | 101 | 91 | 81 | 71 | 61 | 51 | 41 | 31 | 21 | 11 | 大 運 |
| 己 | 庚 | 辛 | 壬 | 癸 | 甲 | 乙 | 丙 | 丁 | 戊 | 己 | 庚 | |
| 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 | 子 |
<案例26:西元1973年6月17日 下午15時28分出生(陽曆), V男。>
查萬年曆得知,V男的農曆為癸丑年五月十七日申時,月柱為戊午,所以V男的四柱八字為
時 日 月 年
壬 甲 戊 癸---陰男,逆時推算
申 申 午 丑
V 男的大運如何推算呢?月柱為戊午,五月的節為芒種,陰男要逆推到上個節為立夏,是四月三日夜子23點47分,計算結果為42日15小時41分,換算成起大 運的時間為14歲2個月10天,虛歲則以15歲起算大運,但慣例中少有超過11歲起算大運的,所以,V男應以5歲開始起算大運。
V男的四柱八字及大運為
時 日 月 年
壬 甲 戊 癸---陰男,逆時推算
申 申 午 丑
| 115 | 105 | 95 | 85 | 75 | 65 | 55 | 45 | 35 | 25 | 15 | 5 | 大 運 |
| 丙 | 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 | 甲 | 乙 | 丙 | 丁 | |
| 午 | 未 | 申 | 酉 | 戌 | 亥 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 |
演練到這裡,如果每個案例,如果認真的網友,隨著這些案例確實推算,就會發現到一個現象,陽男陰女順時針推算到下個節,來找出大運起算的時間,比較容易, 而陰男陽女,需要逆時針推算到上個節,來找出大運的起算時間,往往容易會超過12歲,或者容易接近11歲作為起算大運的時間,那皆不符合一般的起算大運的 習慣,因此,以我們的經驗證明,陰男陽女的大運起算方式,略有不同。
我們就以上一陰男的大運如何起算為例,供各位參考。
同<案例26:西元1973年6月17日 下午15時28分出生(陽曆), V男。>
查萬年曆得知,V男的農曆為癸丑年五月十七日申時,月柱為戊午,所以V男的四柱八字為
時 日 月 年
壬 甲 戊 癸---陰男,逆時推算
申 申 午 丑
V 男的大運如何推算呢?月柱為戊午,五月的節為芒種,原本陰男要逆推到上個節為立夏,但經我們練習的結果獲知,V男的大運起算只需要逆推到所在的當月節即 可,也就是說推到當月的節芒種,五月初六寅時4時7分即可,計算結果為11日9小時21分,那換成起算大運的方式為3歲9個月10天,所以,
V男的大運以虛歲4歲開始起算。
所以V男的大運為:
| 114 | 104 | 94 | 84 | 74 | 64 | 44 | 44 | 34 | 24 | 14 | 4 | 大 運 |
| 丙 | 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 | 甲 | 乙 | 丙 | 丁 | |
| 午 | 未 | 申 | 酉 | 戌 | 亥 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 |
這個結果,就與原來的推算方式,有一年的誤差,但這是可以容許的,所以,各位網友可以找一個陰女的案例來試算看看喔!
另外,關於交節當日的算法,也有兩種說法,網友可依個人習慣,固定採用。事實上,八字原來推算大運就有不同的方法,建議有心累積研究八字命盤者,要固定採 用一派的推算方式,因為不同派別算出來的大運不同,也影響各位累積論斷吉凶的基準,只有採用固定的推算方式,才能讓各位在同樣的基礎上,累積論命的經驗及 精準度。