'传入
日天干地支
Public Function GanRi(nYear As Long, Numn As Long, nDay As Long) As String
Dim TempStr As String
'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
'例如:查2006年4月1日的干支日。 将数值代入计算公式。
'G =4*20 + [20 / 4] + 5*06 + [06 / 4] + [3 * (4 + 1) / 5] + 1 - 3 =197
'Z =8*20 + [20 / 4] + 5*06 + [06 / 4] + [3 * (4 + 1) / 5] + 1 + 7 + 6 =213
'其中 C 是世纪数减一,y 是年份后两位,M 是月份,d 是日数。1月和2月按上一年的13月和14月来算。奇数月i=0,偶数月i=6。G 除以10的余数是天干,Z 除以12的余数是地支。
' 计算时带[ ]的数表示取整
Dim G As Long
Dim Z As Long
Dim i As Long
Dim C As Long
Dim Y As Long
C = Left(nYear, 2)
Y = Right(nYear, 2)
If Numn Mod 2 = 0 Then i = 6 Else i = 0
G = 4 * C + Fix(C / 4) + 5 * Y + Fix(Y / 4) _
+ Fix(3 * (Numn + 1) / 5) + nDay - 4 '干支
Z = 8 * C + Fix(C / 4) + 5 * Y + Fix(Y / 4) _
+ Fix(3 * (Numn + 1) / 5) + nDay + 6 + i '地支
G = G Mod 10
Z = Z Mod 12
ZDay = G
TempStr = Gan(Abs(G)) & Zhi(Abs(Z))
GanRi = TempStr
End Function
"1月和2月按上一年的13月和14月来算" 这个程序没有列出。
还有,当Y = 0时,如2000年1月18日,这个程序如何写?