VB中阳历农历日期转换_vb中阳历农历日期转换
VB中阳历农历日期转换由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“vb中阳历农历日期转换”。
函数nlgl获取月日,nly获取年份。
这是本人在用的函数,也是借鉴网上已有的函数,但网上其它版本基本都有个问题:计算有闰月的农历的时候,会不准确,下面的从1970到2011年的均经过一一对比,没有问题。根据阳历日期获得农历,是没问题的,但如果根据农历算阳历,就不好办了:辛卯年冬月廿七是阳历哪天?答:2011-01-01,对也不对,农历按天干地支算,每60年就会重复的;下面参数'IsGetGl为true表示根据农历返回阳历,根据农历返回阳历则valdate必须是阳历的年份加农历的月日,如2010-01-01(2010年的正月初一)对应的阳历是2011-02-03
'******************************阳历、农历转换
Function nlgl(valdate As Date, Optional IsShort As Boolean, Optional IsGetGl As Boolean)
Dim tYear As Integer
Dim tMonth As Integer
Dim tDay As Integer
Dim i As Integer tYear = Year(valdate)tMonth = Month(valdate)tDay = Day(valdate)
On Error Resume Next
Dim daList(1900 To 2100)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 > 2100 Or tYear
If tYear
tYear = tYear + 19 * Int((194219 * Int((tYear1
AddDay = AddDay + 29 + Val(Mid(daList(tYear), i, 1))
Next i
setDate = DateAdd(“d”, AddDay1: 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
Dim md$, dd$, mm$
md$ = “初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十”
dd$ = Mid(md$,(AddDay4)Mod 10)+ 1, 1)
dz = Mid(DiZhi$,((AddYear-4)Mod 12)+ 1, 1)
nly = tg & dz & “年” End Function