XJ_HE 发表于 2003-9-1 15:40:00

(curyear - 4) Mod 60) Mod 10 在公农历转换中

(curyear - 4) Mod 60) Mod 10

在公家历转换在出现的如上语句,是天干地支的算法,请问有谁知道,到底为什么要这么算呢?一点提示也可以。

zeng29 发表于 2003-9-3 20:08:00

其实熟悉天干地支知识的话,就知道,天干地支共有60种组合(即甲子、乙丑、丙寅、丁卯……),俗称一甲子即60年,公元元年往前数四年是农历的甲子年,(curyear - 4) Mod 60) Mod 10 可以得到甲、乙、丙、丁……,(curyear - 4) Mod 60) Mod 12可以得到子、丑、寅、卯、辰、巳、午……。如2003年按这样算可以得到9(0甲,1乙,2丙……9癸),7(0子,1丑,2寅……6午,7未,……11亥),这样2003就是癸未羊年。

zeng29 发表于 2003-9-4 11:56:00

参考程序如下:

Public Sub Test()
   MsgBox "今年是" & GetCNYearName(Year(Now)) & "年!"
End Sub

Public Function GetCNYearName(CurYear As Integer) As String
   Dim CNYear_TG As Variant, CNYear_DZ As Variant, CNYear_AN As Variant, Temp As Integer
   
   If CurYear < 4 Then Exit Function
   CNYear_TG = Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸")
   CNYear_DZ = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")
   CNYear_AN = Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪")
   Temp = ((CurYear - 4) Mod 60) Mod 12
   GetCNYearName = CNYear_TG(((CurYear - 4) Mod 60) Mod 10) & CNYear_DZ(Temp) & CNYear_AN(Temp)
End Function
页: [1]
查看完整版本: (curyear - 4) Mod 60) Mod 10 在公农历转换中