国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
公歷農歷轉換VB類
userphoto

2009.11.07

關注

公農歷轉換VB類

   網(wǎng)上流傳很多計算公農歷的源代碼,很多,但是居然沒有VB的,暈,
   所以。。。。。
   
   用法:
   以l開始的方法均為陰歷,以s開始的方法均為公歷
   基本的兩個初始函數(shù):
   lInitDate:用農歷年月日初始化日期對象
   sInitDate: 用公歷年月日初始化日期對象
   
   其它的方法看下面的一小段代碼吧
   示例代碼
   Private Sub Command1_Click()
   Dim t As clsDate
   Dim y As Long
   Dim m As Long
   Dim d As Long
   Dim st As Single
   Dim et As Single
   Dim da As Date
   Dim j As Long
   Dim ret As Long
   Set t = New clsDate
   't.sInitDate 1900, 1, 1
   t.lInitDate 2047, 5, 12, False '農歷2047年5月12日,非閏月
   Debug.Print t.lYear
   If t.IsLeap = False Then
   Debug.Print t.lMonth
   Else
   Debug.Print " 閏 " & t.lMonth
   End If
   Debug.Print t.CDayStr(t.lDay) '農歷日期中文大寫
   Debug.Print t.GanZhi(t.lYear) '求干支
   Debug.Print t.YearAttribute(t.lYear) '農歷年的屬相
   Debug.Print t.sYear ' 公歷年
   Debug.Print t.sMonth ' 公歷月
   Debug.Print t.sDay ' 公歷日
   Debug.Print t.sWeekDay '公歷星期
   Debug.Print t.Era(t.sYear)' 公歷紀元
   Debug.Print t.Constellation(t.sMonth, t.sDay) ' 星座
   Debug.Print "Week:" & t.wHoliday ' 按第幾個星期幾計算的假日
   Debug.Print "Solar" & t.sHoliday ' 按公歷計算的假日
   Debug.Print "Lunar" & t.lHoliday ' 按陰歷計算的假日
   Debug.Print t.lSolarTerm ' 計算節(jié)氣
   
   '以下為速度測試,很快吧。
   st = Timer
   With t
   For y = 1900 To 2049
   For m = 1 To 12
   For d = 1 To 28
   .lInitDate y, m, d, False
   
   Next
   Next
   Next
   End With
   't.printf
   et = Timer
   Debug.Print et - st
   Set t = Nothing
   End Sub
   
   以下為代碼:
   
   
   Option Explicit
   Private Type SolarHolidayStruct
   Month As Long
   Day As Long
   Recess As Long
   HolidayName As String
   End Type
   Private Type LunarHolidayStruct
   Month As Long
   Day As Long
   Recess As Long
   HolidayName As String
   End Type
   Private Type WeekHolidayStruct
   Month As Long
   WeekAtMonth As Long
   WeekDay As Long
   HolidayName As String
   End Type
   '保持屬性值的局部變量
   Private mvarsYear As Long '局部復制
   Private mvarsMonth As Long '局部復制
   Private mvarsDay As Long '局部復制
   Private mvarlYear As Long '局部復制
   Private mvarlMonth As Long '局部復制
   Private mvarlDay As Long '局部復制
   Private mvarIsLeap As Boolean '局部復制
   Private Declare Function BitRight32 Lib "Bit4VB.DLL" (ByVal x As Long, ByVal num As Long) As Long
   'Private Declare Function BitRight16 Lib "Bit4VB.DLL" (ByVal x As Integer, ByVal num As Integer) As Integer
   '定義類內部用公用變量
   Private SolarMonth As Variant
   Private Gan As Variant
   Private Zhi As Variant
   Private Animals As Variant
   Private SolarTerm As Variant
   Private sTermInfo As Variant
   Private nStr1 As Variant
   Private nStr2 As Variant
   Private MonthName As Variant
   Private LunarInfo(150) As Long
   Private LunarYearDays(150) As Long
   Private sHolidayInfo() As SolarHolidayStruct
   Private lHolidayInfo() As LunarHolidayStruct
   Private wHolidayInfo() As WeekHolidayStruct
   Private mvarDate As Date '內部使用標準的日期變量
   
   Private Sub Class_Initialize()
   Dim tempArray As Variant
   Dim i As Long
   Dim b As Long
   Dim sFtv As Variant
   Dim lFtv As Variant
   Dim wFtv As Variant
   '根據(jù)VB的位計算特點,故擴充原有的數(shù)據(jù)位,將其變成32位
   tempArray = Array( _
   &H104BD8, &H104AE0, &H10A570, &H1054D5, &H10D260, &H10D950, &H116554, &H1056A0, &H109AD0, &H1055D2, _
   &H104AE0, &H10A5B6, &H10A4D0, &H10D250, &H11D255, &H10B540, &H10D6A0, &H10ADA2, &H1095B0, &H114977, _
   &H104970, &H10A4B0, &H10B4B5, &H106A50, &H106D40, &H11AB54, &H102B60, &H109570, &H1052F2, &H104970, _
   &H106566, &H10D4A0, &H10EA50, &H106E95, &H105AD0, &H102B60, &H1186E3, &H1092E0, &H11C8D7, &H10C950, _
   &H10D4A0, &H11D8A6, &H10B550, &H1056A0, &H11A5B4, &H1025D0, &H1092D0, &H10D2B2, &H10A950, &H10B557, _
   &H106CA0, &H10B550, &H115355, &H104DA0, &H10A5D0, &H114573, &H1052D0, &H10A9A8, &H10E950, &H106AA0, _
   &H10AEA6, &H10AB50, &H104B60, &H10AAE4, &H10A570, &H105260, &H10F263, &H10D950, &H105B57, &H1056A0, _
   &H1096D0, &H104DD5, &H104AD0, &H10A4D0, &H10D4D4, &H10D250, &H10D558, &H10B540, &H10B5A0, &H1195A6, _
   &H1095B0, &H1049B0, &H10A974, &H10A4B0, &H10B27A, &H106A50, &H106D40, &H10AF46, &H10AB60, &H109570, _
   &H104AF5, &H104970, &H1064B0, &H1074A3, &H10EA50, &H106B58, &H1055C0, &H10AB60, &H1096D5, &H1092E0, _
   &H10C960, &H10D954, &H10D4A0, &H10DA50, &H107552, &H1056A0, &H10ABB7, &H1025D0, &H1092D0, &H10CAB5, _
   &H10A950, &H10B4A0, &H10BAA4, &H10AD50, &H1055D9, &H104BA0, &H10A5B0, &H115176, &H1052B0, &H10A930, _
   &H107954, &H106AA0, &H10AD50, &H105B52, &H104B60, &H10A6E6, &H10A4E0, &H10D260, &H10EA65, &H10D530, _
   &H105AA0, &H1076A3, &H1096D0, &H104BD7, &H104AD0, &H10A4D0, &H11D0B6, &H10D250, &H10D520, &H10DD45, _
   &H10B5A0, &H1056D0, &H1055B2, &H1049B0, &H10A577, &H10A4B0, &H10AA50, &H11B255, &H106D20, &H10ADA0)
   For i = 0 To 149
   LunarInfo(i) = tempArray(i)
   Next
   
   tempArray = Array( _
   384, 354, 355, 383, 354, 355, 384, 354, 355, 384, _
   354, 384, 354, 354, 384, 354, 355, 384, 355, 384, _
   354, 354, 384, 354, 354, 385, 354, 355, 384, 354, _
   383, 354, 355, 384, 355, 354, 384, 354, 384, 354, _
   354, 384, 355, 354, 385, 354, 354, 384, 354, 384, _
   354, 355, 384, 354, 355, 384, 354, 383, 355, 354, _
   384, 355, 354, 384, 355, 353, 384, 355, 384, 354, _
   355, 384, 354, 354, 384, 354, 384, 354, 355, 384, _
   355, 354, 384, 354, 384, 354, 354, 384, 355, 355, _
   384, 354, 354, 383, 355, 384, 354, 355, 384, 354, _
   354, 384, 354, 355, 384, 354, 385, 354, 354, 384, _
   354, 354, 384, 355, 384, 354, 355, 384, 354, 354, _
   384, 354, 355, 384, 354, 384, 354, 354, 384, 355, _
   354, 384, 355, 384, 354, 354, 384, 354, 354, 384, _
   355, 355, 384, 354, 384, 354, 354, 384, 354, 355)
   
   For i = 0 To 149
   LunarYearDays(i) = tempArray(i)
   Next
   
   SolarMonth = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
   Gan = Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸")
   Zhi = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")
   Animals = Array("鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬")
   SolarTerm = Array("小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "谷雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至")
   sTermInfo = Array(0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758)
   nStr1 = Array("日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十")
   nStr2 = Array("初", "十", "廿", "卅", " ")
   MonthName = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
   
   '國歷節(jié)日 *表示放假日
   sFtv = Array( _
   1, 1, 1, "元旦", _
   2, 14, 0, "情人節(jié)", 2, 10, 0, "國際氣象節(jié)", _
   3, 18, 0, "婦女節(jié)", 3, 12, 0, "植樹節(jié)", 3, 15, 0, "消費者權益日", _
   4, 1, 0, "愚人節(jié)", _
   5, 1, 1, "勞動節(jié)", 5, 4, 0, "青年節(jié)", 5, 12, 0, "護士節(jié)", 5, 31, 0, "世界無煙日", _
   6, 1, 0, "兒童節(jié)", _
   7, 1, 0, "建黨節(jié) 香港回歸紀念", _
   8, 1, 0, "建軍節(jié)", 8, 8, 0, "中國男子節(jié) 父親節(jié)", _
   9, 9, 0, "毛澤東逝世紀念", 9, 10, 0, "教師節(jié)", 9, 18, 0, "九·一八事變紀念日", 9, 28, 0, "孔子誕辰", _
   10, 1, 0, "國慶節(jié) 國際音樂日", 10, 6, 0, "老人節(jié)", 10, 24, 0, "聯(lián)合國日", _
   11, 12, 0, "孫中山誕辰紀念", _
   12, 1, 0, "世界艾滋病日", 12, 3, 0, "世界殘疾人日", 12, 20, 0, "澳門回歸紀念", 12, 24, 0, "平安夜", 12, 25, 0, "圣誕節(jié)", 12, 26, 0, "毛澤東誕辰紀念")
   
   b = UBound(sFtv) + 1
   ReDim sHolidayInfo(b / 4)
   For i = 0 To (b / 4) - 1
   sHolidayInfo(i).Month = sFtv(i * 4)
   sHolidayInfo(i).Day = sFtv(i * 4 + 1)
   sHolidayInfo(i).Recess = sFtv(i * 4 + 2)
   sHolidayInfo(i).HolidayName = sFtv(i * 4 + 3)
   Next
   
   '農歷節(jié)日 *表示放假日
   lFtv = Array( _
   1, 1, 1, "春節(jié)", _
   1, 15, 0, "元宵節(jié)", _
   5, 5, 0, "端午節(jié)", _
   7, 7, 0, "七夕情人節(jié)", _
   7, 15, 0, "中元節(jié) 盂蘭盆節(jié)", _
   8, 15, 0, "中秋節(jié)", _
   9, 9, 0, "重陽節(jié)", _
   12, 8, 0, "臘八節(jié)", _
   12, 24, 0, "小年")
   '12, 31, 0, "除夕") '注意除夕需要其它方法進行計算
   
   b = UBound(lFtv) + 1
   ReDim lHolidayInfo(b / 4)
   For i = 0 To (b / 4) - 1
   lHolidayInfo(i).Month = lFtv(i * 4)
   lHolidayInfo(i).Day = lFtv(i * 4 + 1)
   lHolidayInfo(i).Recess = lFtv(i * 4 + 2)
   lHolidayInfo(i).HolidayName = lFtv(i * 4 + 3)
   Next
   
   '某月的第幾個星期幾
   wFtv = Array( _
   5, 2, 1, "國際母親節(jié)", _
   5, 3, 1, "全國助殘日", _
   6, 3, 1, "父親節(jié)", _
   9, 3, 3, "國際和平日", _
   9, 4, 1, "國際聾人節(jié)", _
   10, 1, 2, "國際住房日", _
   10, 1, 4, "國際減輕自然災害日", _
   11, 4, 5, "感恩節(jié)")
   b = UBound(wFtv) + 1
   ReDim wHolidayInfo(b / 4)
   For i = 0 To (b / 4) - 1
   wHolidayInfo(i).Month = wFtv(i * 4)
   wHolidayInfo(i).WeekAtMonth = wFtv(i * 4 + 1)
   wHolidayInfo(i).WeekDay = wFtv(i * 4 + 2) '1 代表星期天
   wHolidayInfo(i).HolidayName = wFtv(i * 4 + 3)
   Next
   End Sub
   '/////////////////////////////////////////////////////////////////////////////////////////////////////////////
   '計算農歷上的節(jié)氣
   Public Property Get lSolarTerm() As String
   '//===== 某年的第n個節(jié)氣為幾日(從0小寒起算)
   'function sTerm(y,n) {
   ' var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
   ' return(offDate.getUTCDate())
   '//節(jié)氣
   ' tmp1 = sTerm(y, m * 2) - 1
   
   Dim baseDateAndTime As Date
   Dim newDate As Date
   Dim num As Double
   Dim y As Long
   Dim tempStr As String
   
   baseDateAndTime = #1/6/1900 2:05:00 AM#
   y = mvarsYear
   tempStr = ""
   
   Dim i As Long
   For i = 1 To 24
   num = 525948.76 * (y - 1900) + sTermInfo(i - 1)
   newDate = DateAdd("n", num, baseDateAndTime) '按分鐘計算,之所以不按秒鐘計算,是因為會溢出
   If Abs(DateDiff("d", newDate, mvarDate)) = 0 Then
   tempStr = SolarTerm(i - 1)
   Exit For
   End If
   Next
   
   lSolarTerm = tempStr
   End Property
   '計算按第幾周星期幾計算的節(jié)日
   Public Property Get wHoliday() As String
   Dim w As Long
   Dim i As Long
   Dim b As Long
   Dim FirstDay As Date
   Dim tempStr As String
   
   b = UBound(wHolidayInfo)
   For i = 0 To b
   If wHolidayInfo(i).Month = mvarsMonth Then '當月份相當時
   w = WeekDay(mvarDate)
   If wHolidayInfo(i).WeekDay = w Then '僅當星期幾也相等時
   FirstDay = mvarsMonth & "/" & 1 & "/" & mvarsYear '取當月第一天
   If (DateDiff("ww", FirstDay, mvarDate) = wHolidayInfo(i).WeekAtMonth) Then
   tempStr = wHolidayInfo(i).HolidayName
   End If
   End If
   End If
   Next
   
   
   wHoliday = tempStr
   End Property
   Public Property Get lHoliday() As String
   Dim i As Long
   Dim b As Long
   Dim tempStr As String
   Dim oy As Long
   Dim odate As Date
   Dim ndate As Date
   
   tempStr = ""
   b = UBound(lHolidayInfo)
   If mvarlMonth = 12 And (mvarlDay = 29 Or mvarlDay = 30) Then
   '保
   oy = mvarlYear '保存農歷年數(shù)
   odate = mvarDate
   ndate = mvarDate + 1
   Call sInitDate(Year(ndate), Month(ndate), Day(ndate)) '計算第二天的屬性
   If oy = mvarlYear - 1 Then '如果農歷年數(shù)增加了1
   tempStr = "除夕"
   Call sInitDate(Year(odate), Month(odate), Day(odate)) '恢復到今天原有數(shù)據(jù)
   
   End If
   Else
   For i = 0 To b
   If (lHolidayInfo(i).Month = mvarlMonth) And _
   (lHolidayInfo(i).Day = mvarlDay) Then
   tempStr = lHolidayInfo(i).HolidayName
   Exit For
   End If
   Next
   End If
   lHoliday = tempStr
   End Property
   '求公歷節(jié)日
   Public Property Get sHoliday() As String
   Dim i As Long
   Dim b As Long
   Dim tempStr As String
   
   tempStr = ""
   b = UBound(sHolidayInfo)
   For i = 0 To b
   If (sHolidayInfo(i).Month = mvarsMonth) And _
   (sHolidayInfo(i).Day = mvarsDay) Then
   tempStr = sHolidayInfo(i).HolidayName
   Exit For
   End If
   Next
   sHoliday = tempStr
   End Property
   '是否是農歷的閏月
   Public Property Get IsLeap() As Boolean
   IsLeap = mvarIsLeap
   End Property
   Public Property Get lDay() As Long
   lDay = mvarlDay
   End Property
   Public Property Get lMonth() As Long
   lMonth = mvarlMonth
   End Property
   Public Property Get lYear() As Long
   lYear = mvarlYear
   End Property
   Public Property Get sWeekDay() As Long
   sWeekDay = WeekDay(mvarDate)
   End Property
   Public Property Get sDay() As Long
   sDay = mvarsDay
   End Property
   Public Property Get sMonth() As Long
   sMonth = mvarsMonth
   End Property
   Public Property Get sYear() As Long
   sYear = mvarsYear
   End Property
   '////////////////////////////////////////////////////////////////////////////////////////////////////////
   Public Function IsToday(y As Long, m As Long, d As Long) As Boolean
   
   If (Year(Date) = y) And _
   (Month(Date) = m) And _
   (Day(Date) = d) Then
   IsToday = True
   Else
   IsToday = False
   End If
   
   End Function
   
   '根據(jù)年份不同計算當年屬于什么朝代
   Public Function Era(y As Long) As String
   Dim tempStr As String
   
   If y < 1874 Then
   tempStr = "未知"
   Else
   If y <= 1908 Then
   tempStr = "清朝光緒"
   If y = 1874 Then
   tempStr = tempStr & "元年"
   Else
   tempStr = tempStr & UpNumber(CStr(y - 1874)) & "年"
   End If
   Else
   If y <= 1910 Then
   tempStr = "清朝宣統(tǒng)"
   If y = 1909 Then
   tempStr = tempStr & "元年"
   Else
   tempStr = tempStr & UpNumber(CStr(y - 1909 + 1)) & "年"
   End If
   Else
   If y < 1949 Then
   tempStr = "中華民國"
   If y = 1912 Then
   tempStr = tempStr & "元年"
   Else
   tempStr = tempStr & UpNumber(CStr(y - 1912 + 1)) & "年"
   End If
   Else
   tempStr = "中華人民共和國成立"
   If y = 1949 Then
   tempStr = tempStr & "了"
   Else
   Select Case y
   Case 2000
   tempStr = "千禧年"
   Case Else
   tempStr = tempStr & UpNumber(CStr(y - 1949)) & "周年"
   End Select
   End If
   End If
   End If
   End If
   End If
   
   Era = tempStr
   End Function
   ' 傳入 num 傳回干支, 0=甲子
   Public Function GanZhi(num As Long) As String
   Dim tempStr As String
   Dim i As Long
   i = (num - 1864) Mod 60 '計算干支
   tempStr = Gan(i Mod 10) & Zhi(i Mod 12)
   GanZhi = tempStr
   End Function
   '計算年的屬相字串
   Public Function YearAttribute(y As Long) As String
   YearAttribute = Animals((y - 1900) Mod 12)
   End Function
   '將數(shù)字漢化
   Public Function UpNumber(Dxs As String) As String
   '檢測為空時
   If Trim(Dxs) = "" Then
   UpNumber = ""
   Exit Function
   End If
   
   Dim Sw As Integer, SzUp As Integer, tempStr As String, DXStr As String
   Sw = Len(Trim(Dxs))
   
   Dim i As Integer
   For i = 1 To Sw
   tempStr = Right(Trim(Dxs), i)
   tempStr = Left(tempStr, 1)
   tempStr = Converts(tempStr)
   Select Case i
   Case 1
   If tempStr = "零" Then
   tempStr = ""
   Else
   tempStr = tempStr + ""
   End If
   Case 2
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "十"
   End If
   Case 3
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "百"
   End If
   Case 4
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "千"
   End If
   Case 5
   If tempStr = "零" Then
   tempStr = "萬"
   Else
   tempStr = tempStr + "萬"
   End If
   Case 6
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "十"
   End If
   Case 7
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "百"
   End If
   Case 8
   If tempStr = "零" Then
   tempStr = "零"
   Else
   tempStr = tempStr + "千"
   End If
   Case 9
   If tempStr = "零" Then
   tempStr = "億"
   Else
   tempStr = tempStr + "億"
   End If
   End Select
   Dim TempA As String
   TempA = Left(Trim(DXStr), 1)
   If tempStr = "零" Then
   Select Case TempA
   Case "零"
   DXStr = DXStr
   Case "萬"
   DXStr = DXStr
   Case "億"
   DXStr = DXStr
   Case Else
   DXStr = tempStr + DXStr
   End Select
   Else
   DXStr = tempStr + DXStr
   End If
   Next
   
   UpNumber = DXStr
   End Function
   Private Function Converts(NumStr As String) As String
   Select Case val(NumStr)
   Case 0
   Converts = "零"
   Case 1
   Converts = "一"
   Case 2
   Converts = "二"
   Case 3
   Converts = "三"
   Case 4
   Converts = "四"
   Case 5
   Converts = "五"
   Case 6
   Converts = "六"
   Case 7
   Converts = "七"
   Case 8
   Converts = "八"
   Case 9
   Converts = "九"
   End Select
   End Function
   '中文日期
   Public Function CDayStr(d As Long) As String
   Dim s As String
   Select Case d
   Case 0
   s = ""
   Case 10
   s = "初十"
   Case 20
   s = "二十"
   Case 30
   s = "三十"
   Case Else
   s = nStr2(d \ 10) '整數(shù)除法
   s = s & nStr1(d Mod 10)
   End Select
   CDayStr = s
   End Function
   '計算星座歸屬
   Public Function Constellation(m As Long, d As Long) As String
   Dim y As Long
   Dim tempDate As Date
   Dim ConstellName As String
   
   y = 2000
   tempDate = m & "/" & d & "/" & y
   Select Case tempDate
   Case #3/21/2003# To #4/19/2000#
   ConstellName = "白羊"
   Case #4/20/2000# To #5/20/2000#
   ConstellName = "金牛"
   Case #5/21/2000# To #6/21/2000#
   ConstellName = "雙子"
   Case #6/22/2000# To #7/22/2000#
   ConstellName = "巨蟹"
   Case #7/23/2000# To #8/22/2000#
   ConstellName = "獅子"
   Case #8/23/2000# To #9/22/2000#
   ConstellName = "處女"
   Case #9/23/2000# To #10/23/2000#
   ConstellName = "天秤"
   Case #10/24/2000# To #11/21/2000#
   ConstellName = "天蝎"
   Case #11/22/2000# To #12/21/2000#
   ConstellName = "射手"
   Case #12/22/2000# To #12/31/2000#
   ConstellName = "摩蝎"
   Case #1/1/2000# To #1/19/2000#
   ConstellName = "摩蝎"
   Case #1/20/2000# To #2/18/2000#
   ConstellName = "水瓶"
   Case #2/19/2000# To #3/20/2000#
   ConstellName = "雙魚"
   Case Else
   ConstellName = ""
   End Select
   Constellation = ConstellName
   End Function
   '/////////////////////////////////////////////////////////////////////////////////////////////////////////
   '以下為類內部使用的一些函數(shù)
   '傳回農歷 y年的總天數(shù)
   Private Function lYearDays(ByVal y As Long) As Long
   
   ' Dim i As Long
   ' Dim f As Long
   ' Dim sumDay As Long
   ' Dim info As Long
   
   ' sumDay = 348
   ' i = &H8000
   ' info = LunarInfo(y - 1900) And &H1000FFFF '屏蔽高位,
   ' Do
   ' f = info And i
   ' If f <> 0 Then
   ' sumDay = sumDay + 1
   ' End If
   ' i = BitRight16(i, 1)
   ' Loop Until i < &H10
   ' lYearDays = sumDay + leapDays(y)
   
   lYearDays = LunarYearDays(y - 1900) '先計算出每年的天數(shù),并形成數(shù)組,以減少以后的運算時間
   End Function
   '傳回農歷 y年m月的總天數(shù)
   Private Function lMonthDays(ByVal y As Long, ByVal m As Long) As Long
   If (LunarInfo(y - 1900) And &H1000FFFF) And BitRight32(&H10000, m) Then
   lMonthDays = 30
   Else
   lMonthDays = 29
   End If
   End Function
   '傳回農歷 y年閏月的天數(shù)
   Private Function leapDays(y As Long) As Long
   If leapMonth(y) Then
   If LunarInfo(y - 1900) And &H10000 Then
   leapDays = 30
   Else
   leapDays = 29
   End If
   Else
   leapDays = 0
   End If
   End Function
   '傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
   Private Function leapMonth(y As Long) As Long
   Dim i As Long
   i = LunarInfo(y - 1900) And &HF
   If i > 12 Then
   Debug.Print y
   End If
   leapMonth = i
   End Function
   '計算公歷年月的天數(shù)
   Private Function SolarDays(y As Long, m As Long) As Long
   Dim d As Long
   
   If (y Mod 4) = 0 Then '閏年
   If m = 2 Then
   d = 29
   Else
   d = SolarMonth(m - 1)
   End If
   Else
   If m = 2 Then
   d = 28
   Else
   d = SolarMonth(m - 1)
   End If
   End If
   
   SolarDays = d
   End Function
   
   '//////////////////////////////////////////////////////////////////////////////////////////////////
   '
   '主要的函數(shù),用公歷年月日對日期對象進行初始化,在此函數(shù)內部完成對私有對象屬性的設置
   '
   '//////////////////////////////////////////////////////////////////////////////////////////////////
   Public Sub sInitDate(ByVal y As Long, ByVal m As Long, ByVal d As Long)
   Dim i As Long
   Dim leap As Long
   Dim Temp As Long
   Dim offset As Long
   
   mvarDate = m & "/" & d & "/" & y
   mvarsYear = y
   mvarsMonth = m
   mvarsDay = d
   
   '農歷日期計算部分
   leap = 0
   Temp = 0
   
   offset = mvarDate - #1/30/1900# '計算兩天的基本差距
   
   For i = 1900 To 2049
   'temp = lYearDays(i) '求當年農歷年天數(shù)
   
   offset = offset - Temp
   If offset < 1 Then Exit For
   Next
   
   offset = offset + Temp
   mvarlYear = i
   
   leap = leapMonth(i) '閏哪個月
   mvarIsLeap = False
   For i = 1 To 12
   '閏月
   If leap > 0 And i = (leap + 1) And mvarIsLeap = False Then
   mvarIsLeap = True
   i = i - 1
   Temp = leapDays(mvarlYear) '計算閏月天數(shù)
   Else
   Temp = lMonthDays(mvarlYear, i) '計算非閏月天數(shù)
   End If
   
   offset = offset - Temp
   If offset <= 0 Then Exit For
   Next
   
   offset = offset + Temp
   mvarlMonth = i
   mvarlDay = offset
   
   End Sub
   '//////////////////////////////////////////////////////////////////////////////////////////////////
   '
   '主要的函數(shù),用農歷年月日對日期對象進行初始化,在此函數(shù)內部完成對私有對象屬性的設置
   '
   '//////////////////////////////////////////////////////////////////////////////////////////////////
   Public Sub lInitDate(ByVal y As Long, ByVal m As Long, ByVal d As Long, Optional LeapFlag As Boolean = False)
   Dim i As Long
   Dim leap As Long
   Dim Temp As Long
   Dim offset As Long
   mvarlYear = y
   mvarlMonth = m
   mvarlDay = d
   
   offset = 0
   
   For i = 1900 To y - 1
   Temp = LunarYearDays(i - 1900) '求當年農歷年天數(shù)
   offset = offset + Temp
   Next
   
   leap = leapMonth(y) '閏哪個月
   If m <> leap Then
   mvarIsLeap = False '當前日期并非閏月
   Else
   mvarIsLeap = LeapFlag '使用用戶輸入的是否閏月月份
   End If
   
   If (m < leap) Or (leap = 0) Then '當閏月在當前日期后
   For i = 1 To m - 1
   Temp = lMonthDays(y, i) '計算非閏月天數(shù)
   offset = offset + Temp
   Next
   Else '在閏月后
   If mvarIsLeap = False Then '用戶要計算非閏月的月份
   For i = 1 To m - 1
   Temp = lMonthDays(y, i) '計算非閏月天數(shù)
   offset = offset + Temp
   Next
   If m > leap Then
   Temp = leapDays(y) '計算閏月天數(shù)
   offset = offset + Temp
   End If
   
   Else '此時只有mvarisleap=ture,
   For i = 1 To m
   Temp = lMonthDays(y, i) '計算非閏月天數(shù)
   offset = offset + Temp
   Next
   End If
   End If
   
   offset = offset + d '加上當月的天數(shù)
   mvarDate = DateAdd("d", offset, #1/30/1900#)
   mvarsYear = Year(mvarDate)
   mvarsMonth = Month(mvarDate)
   mvarsDay = Day(mvarDate)
   End Sub

   '本模塊用于打印出1900-2049年 每年農歷的天數(shù),可以用于數(shù)組初始化
   'Public Sub printf()
   ' Dim i As Long, j As Long
   ' Dim temp(10) As Long
   ' Dim base As Long
   
   ' base = 1900
   ' For i = 1 To 15
   ' For j = 1 To 10
   ' temp(j - 1) = lYearDays((i - 1) * 10 + (j - 1) + base) '求當年農歷年天數(shù)
   ' Next
   ' Debug.Print CStr(temp(0)) & " , " & CStr(temp(1)) & " , " & CStr(temp(2)) & " , " & CStr(temp(3)) & " , " & CStr(temp(4)) & " , " & CStr(temp(5)) & " , " & CStr(temp(6)) & " , " & CStr(temp(7)) & " , " & CStr(temp(8)) & " , " & CStr(temp(9)) & " , " & " _ "
   ' Next
   'End Sub
 
 
 
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VB如何處理由C語言編寫的dll返回的數(shù)組
VFB_VB調用VBF寫的DLL
vb時間處理
VB實用代碼,收藏??!
VB6自定義函數(shù)設計數(shù)組
VB6中給數(shù)組賦值的限制
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服