以下是程式碼,其中將陽曆轉為農曆的函式getLunarDate來自網路:Option Explicit"Public Function getLunarDate(Optional ByVal datetime As Date) As StringDim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)Dim curTime, curYear, curMonth, curDay, curWeekdayDim GongliStr, WeekdayStr, NongliStr, NongliDayStrDim i, m, n, k, isEnd, bit, TheDate"測試用方法"獲取當前系統時間"curTime = Now()"實際獲得傳入日期引數curTime = datetime"星期名WeekName(0) = " * "WeekName(1) = "星期日"WeekName(2) = "星期一"WeekName(3) = "星期二"WeekName(4) = "星期三"WeekName(5) = "星期四"WeekName(6) = "星期五"WeekName(7) = "星期六""天干名稱TianGan(0) = "甲"TianGan(1) = "乙"TianGan(2) = "丙"TianGan(3) = "丁"TianGan(4) = "戊"TianGan(5) = "己"TianGan(6) = "庚"TianGan(7) = "辛"TianGan(8) = "壬"TianGan(9) = "癸""地支名稱DiZhi(0) = "子"DiZhi(1) = "醜"DiZhi(2) = "寅"DiZhi(3) = "卯"DiZhi(4) = "辰"DiZhi(5) = "巳"DiZhi(6) = "午"DiZhi(7) = "未"DiZhi(8) = "申"DiZhi(9) = "酉"DiZhi(10) = "戌"DiZhi(11) = "亥""屬相名稱ShuXiang(0) = "鼠"ShuXiang(1) = "牛"ShuXiang(2) = "虎"ShuXiang(3) = "兔"ShuXiang(4) = "龍"ShuXiang(5) = "蛇"ShuXiang(6) = "馬"ShuXiang(7) = "羊"ShuXiang(8) = "猴"ShuXiang(9) = "雞"ShuXiang(10) = "狗"ShuXiang(11) = "豬""農曆日期名DayName(0) = "*"DayName(1) = "初一"DayName(2) = "初二"DayName(3) = "初三"DayName(4) = "初四"DayName(5) = "初五"DayName(6) = "初六"DayName(7) = "初七"DayName(8) = "初八"DayName(9) = "初九"DayName(10) = "初十"DayName(11) = "十一"DayName(12) = "十二"DayName(13) = "十三"DayName(14) = "十四"DayName(15) = "十五"DayName(16) = "十六"DayName(17) = "十七"DayName(18) = "十八"DayName(19) = "十九"DayName(20) = "二十"DayName(21) = "廿一"DayName(22) = "廿二"DayName(23) = "廿三"DayName(24) = "廿四"DayName(25) = "廿五"DayName(26) = "廿六"DayName(27) = "廿七"DayName(28) = "廿八"DayName(29) = "廿九"DayName(30) = "三十""農曆月份名MonName(0) = "*"MonName(1) = "正"MonName(2) = "二"MonName(3) = "三"MonName(4) = "四"MonName(5) = "五"MonName(6) = "六"MonName(7) = "七"MonName(8) = "八"MonName(9) = "九"MonName(10) = "十"MonName(11) = "十一"MonName(12) = "臘""公曆每月前面的天數MonthAdd(0) = 0MonthAdd(1) = 31MonthAdd(2) = 59MonthAdd(3) = 90MonthAdd(4) = 120MonthAdd(5) = 151MonthAdd(6) = 181MonthAdd(7) = 212MonthAdd(8) = 243MonthAdd(9) = 273MonthAdd(10) = 304MonthAdd(11) = 334"農曆資料NongliData(0) = 2635NongliData(1) = 333387NongliData(2) = 1701NongliData(3) = 1748NongliData(4) = 267701NongliData(5) = 694NongliData(6) = 2391NongliData(7) = 133423NongliData(8) = 1175NongliData(9) = 396438NongliData(10) = 3402NongliData(11) = 3749NongliData(12) = 331177NongliData(13) = 1453NongliData(14) = 694NongliData(15) = 201326NongliData(16) = 2350NongliData(17) = 465197NongliData(18) = 3221NongliData(19) = 3402NongliData(20) = 400202NongliData(21) = 2901NongliData(22) = 1386NongliData(23) = 267611NongliData(24) = 605NongliData(25) = 2349NongliData(26) = 137515NongliData(27) = 2709NongliData(28) = 464533NongliData(29) = 1738NongliData(30) = 2901NongliData(31) = 330421NongliData(32) = 1242NongliData(33) = 2651NongliData(34) = 199255NongliData(35) = 1323NongliData(36) = 529706NongliData(37) = 3733NongliData(38) = 1706NongliData(39) = 398762NongliData(40) = 2741NongliData(41) = 1206NongliData(42) = 267438NongliData(43) = 2647NongliData(44) = 1318NongliData(45) = 204070NongliData(46) = 3477NongliData(47) = 461653NongliData(48) = 1386NongliData(49) = 2413NongliData(50) = 330077NongliData(51) = 1197NongliData(52) = 2637NongliData(53) = 268877NongliData(54) = 3365NongliData(55) = 531109NongliData(56) = 2900NongliData(57) = 2922NongliData(58) = 398042NongliData(59) = 2395NongliData(60) = 1179NongliData(61) = 267415NongliData(62) = 2635NongliData(63) = 661067NongliData(64) = 1701NongliData(65) = 1748NongliData(66) = 398772NongliData(67) = 2742NongliData(68) = 2391NongliData(69) = 330031NongliData(70) = 1175NongliData(71) = 1611NongliData(72) = 200010NongliData(73) = 3749NongliData(74) = 527717NongliData(75) = 1452NongliData(76) = 2742NongliData(77) = 332397NongliData(78) = 2350NongliData(79) = 3222NongliData(80) = 268949NongliData(81) = 3402NongliData(82) = 3493NongliData(83) = 133973NongliData(84) = 1386NongliData(85) = 464219NongliData(86) = 605NongliData(87) = 2349NongliData(88) = 334123NongliData(89) = 2709NongliData(90) = 2890NongliData(91) = 267946NongliData(92) = 2773NongliData(93) = 592565NongliData(94) = 1210NongliData(95) = 2651NongliData(96) = 395863NongliData(97) = 1323NongliData(98) = 2707NongliData(99) = 265877"生成當前公曆年、月、日 ==> GongliStrcurYear = Year(curTime)curMonth = Month(curTime)curDay = Day(curTime)GongliStr = curYear & "年"If (curMonth < 10) Then GongliStr = GongliStr & "0" & curMonth & "月"Else GongliStr = GongliStr & curMonth & "月"End IfIf (curDay < 10) Then GongliStr = GongliStr & "0" & curDay & "日"Else GongliStr = GongliStr & curDay & "日"End If"生成當前公曆星期 ==> WeekdayStrcurWeekday = Weekday(curTime)WeekdayStr = WeekName(curWeekday)"計算到初始時間1921年2月8日的天數:1921-2-8(正月初一)TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38If ((curYear Mod 4) = 0 And curMonth > 2) Then TheDate = TheDate + 1End If"計算農曆天干、地支、月、日isEnd = 0m = 0Do If (NongliData(m) < 4095) Then k = 11 Else k = 12 End If n = kDo If (n < 0) Then Exit Do End If "獲取NongliData(m)的第n個二進位制位的值bit = NongliData(m)For i = 1 To n Step 1 bit = Int(bit / 2)Nextbit = bit Mod 2If (TheDate <= 29 + bit) Then isEnd = 1 Exit DoEnd IfTheDate = TheDate - 29 - bitn = n - 1LoopIf (isEnd = 1) Then Exit DoEnd Ifm = m + 1LoopcurYear = 1921 + mcurMonth = k - n + 1curDay = TheDateIf (k = 12) Then If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then curMonth = 1 - curMonth ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then curMonth = curMonth - 1 End IfEnd If"生成農曆天干、地支、屬相 ==> NongliStrNongliStr = "農曆" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")""生成農曆月、日 ==> NongliDayStrIf (curMonth < 1) Then NongliDayStr = "閏" & MonName(-1 * curMonth)Else NongliDayStr = MonName(curMonth)End IfNongliDayStr = NongliDayStr & "月"NongliDayStr = NongliDayStr & DayName(curDay)"測試用,利用彈出框顯示陰曆"MsgBox NongliStr & NongliDayStr"實際用,返回陰曆日期getLunarDate = NongliStr & NongliDayStrEnd FunctionPrivate Sub Calendar1_BeforeUpdate(Cancel As Integer) Label1.Caption = getLunarDate(Calendar1.Value)End SubPrivate Sub Form_Load() Label1.Caption = getLunarDate(Calendar1.Value)End Sub
以下是程式碼,其中將陽曆轉為農曆的函式getLunarDate來自網路:Option Explicit"Public Function getLunarDate(Optional ByVal datetime As Date) As StringDim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)Dim curTime, curYear, curMonth, curDay, curWeekdayDim GongliStr, WeekdayStr, NongliStr, NongliDayStrDim i, m, n, k, isEnd, bit, TheDate"測試用方法"獲取當前系統時間"curTime = Now()"實際獲得傳入日期引數curTime = datetime"星期名WeekName(0) = " * "WeekName(1) = "星期日"WeekName(2) = "星期一"WeekName(3) = "星期二"WeekName(4) = "星期三"WeekName(5) = "星期四"WeekName(6) = "星期五"WeekName(7) = "星期六""天干名稱TianGan(0) = "甲"TianGan(1) = "乙"TianGan(2) = "丙"TianGan(3) = "丁"TianGan(4) = "戊"TianGan(5) = "己"TianGan(6) = "庚"TianGan(7) = "辛"TianGan(8) = "壬"TianGan(9) = "癸""地支名稱DiZhi(0) = "子"DiZhi(1) = "醜"DiZhi(2) = "寅"DiZhi(3) = "卯"DiZhi(4) = "辰"DiZhi(5) = "巳"DiZhi(6) = "午"DiZhi(7) = "未"DiZhi(8) = "申"DiZhi(9) = "酉"DiZhi(10) = "戌"DiZhi(11) = "亥""屬相名稱ShuXiang(0) = "鼠"ShuXiang(1) = "牛"ShuXiang(2) = "虎"ShuXiang(3) = "兔"ShuXiang(4) = "龍"ShuXiang(5) = "蛇"ShuXiang(6) = "馬"ShuXiang(7) = "羊"ShuXiang(8) = "猴"ShuXiang(9) = "雞"ShuXiang(10) = "狗"ShuXiang(11) = "豬""農曆日期名DayName(0) = "*"DayName(1) = "初一"DayName(2) = "初二"DayName(3) = "初三"DayName(4) = "初四"DayName(5) = "初五"DayName(6) = "初六"DayName(7) = "初七"DayName(8) = "初八"DayName(9) = "初九"DayName(10) = "初十"DayName(11) = "十一"DayName(12) = "十二"DayName(13) = "十三"DayName(14) = "十四"DayName(15) = "十五"DayName(16) = "十六"DayName(17) = "十七"DayName(18) = "十八"DayName(19) = "十九"DayName(20) = "二十"DayName(21) = "廿一"DayName(22) = "廿二"DayName(23) = "廿三"DayName(24) = "廿四"DayName(25) = "廿五"DayName(26) = "廿六"DayName(27) = "廿七"DayName(28) = "廿八"DayName(29) = "廿九"DayName(30) = "三十""農曆月份名MonName(0) = "*"MonName(1) = "正"MonName(2) = "二"MonName(3) = "三"MonName(4) = "四"MonName(5) = "五"MonName(6) = "六"MonName(7) = "七"MonName(8) = "八"MonName(9) = "九"MonName(10) = "十"MonName(11) = "十一"MonName(12) = "臘""公曆每月前面的天數MonthAdd(0) = 0MonthAdd(1) = 31MonthAdd(2) = 59MonthAdd(3) = 90MonthAdd(4) = 120MonthAdd(5) = 151MonthAdd(6) = 181MonthAdd(7) = 212MonthAdd(8) = 243MonthAdd(9) = 273MonthAdd(10) = 304MonthAdd(11) = 334"農曆資料NongliData(0) = 2635NongliData(1) = 333387NongliData(2) = 1701NongliData(3) = 1748NongliData(4) = 267701NongliData(5) = 694NongliData(6) = 2391NongliData(7) = 133423NongliData(8) = 1175NongliData(9) = 396438NongliData(10) = 3402NongliData(11) = 3749NongliData(12) = 331177NongliData(13) = 1453NongliData(14) = 694NongliData(15) = 201326NongliData(16) = 2350NongliData(17) = 465197NongliData(18) = 3221NongliData(19) = 3402NongliData(20) = 400202NongliData(21) = 2901NongliData(22) = 1386NongliData(23) = 267611NongliData(24) = 605NongliData(25) = 2349NongliData(26) = 137515NongliData(27) = 2709NongliData(28) = 464533NongliData(29) = 1738NongliData(30) = 2901NongliData(31) = 330421NongliData(32) = 1242NongliData(33) = 2651NongliData(34) = 199255NongliData(35) = 1323NongliData(36) = 529706NongliData(37) = 3733NongliData(38) = 1706NongliData(39) = 398762NongliData(40) = 2741NongliData(41) = 1206NongliData(42) = 267438NongliData(43) = 2647NongliData(44) = 1318NongliData(45) = 204070NongliData(46) = 3477NongliData(47) = 461653NongliData(48) = 1386NongliData(49) = 2413NongliData(50) = 330077NongliData(51) = 1197NongliData(52) = 2637NongliData(53) = 268877NongliData(54) = 3365NongliData(55) = 531109NongliData(56) = 2900NongliData(57) = 2922NongliData(58) = 398042NongliData(59) = 2395NongliData(60) = 1179NongliData(61) = 267415NongliData(62) = 2635NongliData(63) = 661067NongliData(64) = 1701NongliData(65) = 1748NongliData(66) = 398772NongliData(67) = 2742NongliData(68) = 2391NongliData(69) = 330031NongliData(70) = 1175NongliData(71) = 1611NongliData(72) = 200010NongliData(73) = 3749NongliData(74) = 527717NongliData(75) = 1452NongliData(76) = 2742NongliData(77) = 332397NongliData(78) = 2350NongliData(79) = 3222NongliData(80) = 268949NongliData(81) = 3402NongliData(82) = 3493NongliData(83) = 133973NongliData(84) = 1386NongliData(85) = 464219NongliData(86) = 605NongliData(87) = 2349NongliData(88) = 334123NongliData(89) = 2709NongliData(90) = 2890NongliData(91) = 267946NongliData(92) = 2773NongliData(93) = 592565NongliData(94) = 1210NongliData(95) = 2651NongliData(96) = 395863NongliData(97) = 1323NongliData(98) = 2707NongliData(99) = 265877"生成當前公曆年、月、日 ==> GongliStrcurYear = Year(curTime)curMonth = Month(curTime)curDay = Day(curTime)GongliStr = curYear & "年"If (curMonth < 10) Then GongliStr = GongliStr & "0" & curMonth & "月"Else GongliStr = GongliStr & curMonth & "月"End IfIf (curDay < 10) Then GongliStr = GongliStr & "0" & curDay & "日"Else GongliStr = GongliStr & curDay & "日"End If"生成當前公曆星期 ==> WeekdayStrcurWeekday = Weekday(curTime)WeekdayStr = WeekName(curWeekday)"計算到初始時間1921年2月8日的天數:1921-2-8(正月初一)TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38If ((curYear Mod 4) = 0 And curMonth > 2) Then TheDate = TheDate + 1End If"計算農曆天干、地支、月、日isEnd = 0m = 0Do If (NongliData(m) < 4095) Then k = 11 Else k = 12 End If n = kDo If (n < 0) Then Exit Do End If "獲取NongliData(m)的第n個二進位制位的值bit = NongliData(m)For i = 1 To n Step 1 bit = Int(bit / 2)Nextbit = bit Mod 2If (TheDate <= 29 + bit) Then isEnd = 1 Exit DoEnd IfTheDate = TheDate - 29 - bitn = n - 1LoopIf (isEnd = 1) Then Exit DoEnd Ifm = m + 1LoopcurYear = 1921 + mcurMonth = k - n + 1curDay = TheDateIf (k = 12) Then If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then curMonth = 1 - curMonth ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then curMonth = curMonth - 1 End IfEnd If"生成農曆天干、地支、屬相 ==> NongliStrNongliStr = "農曆" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")""生成農曆月、日 ==> NongliDayStrIf (curMonth < 1) Then NongliDayStr = "閏" & MonName(-1 * curMonth)Else NongliDayStr = MonName(curMonth)End IfNongliDayStr = NongliDayStr & "月"NongliDayStr = NongliDayStr & DayName(curDay)"測試用,利用彈出框顯示陰曆"MsgBox NongliStr & NongliDayStr"實際用,返回陰曆日期getLunarDate = NongliStr & NongliDayStrEnd FunctionPrivate Sub Calendar1_BeforeUpdate(Cancel As Integer) Label1.Caption = getLunarDate(Calendar1.Value)End SubPrivate Sub Form_Load() Label1.Caption = getLunarDate(Calendar1.Value)End Sub