古詩詞大全網 - 成語經典 - vb算農歷

vb算農歷

網上也有代碼的。以下是我修改過的,沒有註釋

Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)

Dim curTime, curYear, curMonth, curDay, curWeekday

Dim GongliStr, WeekdayStr, NongliStr, NongliMonStr, NongliDayStr

Dim i, m, n, k, isEnd, bit, TheDate

Public Function wYear(curTime As Date, YearOrDay As Integer)

'curTime是傳遞需要轉化的日期,YearOrDay是需要輸出什麽結果

' YearOrDay的值是 0=年月日,1=僅農歷年,2=僅月日,3=農歷節日

' 4=僅月,5=僅日

'獲取當前系統時間

'curTime = CDate("2008-4-18")

'星期名

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) = 0

MonthAdd(1) = 31

MonthAdd(2) = 59

MonthAdd(3) = 90

MonthAdd(4) = 120

MonthAdd(5) = 151

MonthAdd(6) = 181

MonthAdd(7) = 212

MonthAdd(8) = 243

MonthAdd(9) = 273

MonthAdd(10) = 304

MonthAdd(11) = 334

'農歷數據

NongliData(0) = 2635

NongliData(1) = 333387

NongliData(2) = 1701

NongliData(3) = 1748

NongliData(4) = 267701

NongliData(5) = 694

NongliData(6) = 2391

NongliData(7) = 133423

NongliData(8) = 1175

NongliData(9) = 396438

NongliData(10) = 3402

NongliData(11) = 3749

NongliData(12) = 331177

NongliData(13) = 1453

NongliData(14) = 694

NongliData(15) = 201326

NongliData(16) = 2350

NongliData(17) = 465197

NongliData(18) = 3221

NongliData(19) = 3402

NongliData(20) = 400202

NongliData(21) = 2901

NongliData(22) = 1386

NongliData(23) = 267611

NongliData(24) = 605

NongliData(25) = 2349

NongliData(26) = 137515

NongliData(27) = 2709

NongliData(28) = 464533

NongliData(29) = 1738

NongliData(30) = 2901

NongliData(31) = 330421

NongliData(32) = 1242

NongliData(33) = 2651

NongliData(34) = 199255

NongliData(35) = 1323

NongliData(36) = 529706

NongliData(37) = 3733

NongliData(38) = 1706

NongliData(39) = 398762

NongliData(40) = 2741

NongliData(41) = 1206

NongliData(42) = 267438

NongliData(43) = 2647

NongliData(44) = 1318

NongliData(45) = 204070

NongliData(46) = 3477

NongliData(47) = 461653

NongliData(48) = 1386

NongliData(49) = 2413

NongliData(50) = 330077

NongliData(51) = 1197

NongliData(52) = 2637

NongliData(53) = 268877

NongliData(54) = 3365

NongliData(55) = 531109

NongliData(56) = 2900

NongliData(57) = 2922

NongliData(58) = 398042

NongliData(59) = 2395

NongliData(60) = 1179

NongliData(61) = 267415

NongliData(62) = 2635

NongliData(63) = 661067

NongliData(64) = 1701

NongliData(65) = 1748

NongliData(66) = 398772

NongliData(67) = 2742

NongliData(68) = 2391

NongliData(69) = 330031

NongliData(70) = 1175

NongliData(71) = 1611

NongliData(72) = 200010

NongliData(73) = 3749

NongliData(74) = 527717

NongliData(75) = 1452

NongliData(76) = 2742

NongliData(77) = 332397

NongliData(78) = 2350

NongliData(79) = 3222

NongliData(80) = 268949

NongliData(81) = 3402

NongliData(82) = 3493

NongliData(83) = 133973

NongliData(84) = 1386

NongliData(85) = 464219

NongliData(86) = 605

NongliData(87) = 2349

NongliData(88) = 334123

NongliData(89) = 2709

NongliData(90) = 2890

NongliData(91) = 267946

NongliData(92) = 2773

NongliData(93) = 592565

NongliData(94) = 1210

NongliData(95) = 2651

NongliData(96) = 395863

NongliData(97) = 1323

NongliData(98) = 2707

NongliData(99) = 265877

'生成當前公歷年、月、日 ==> GongliStr

curYear = Year(curTime)

curMonth = Month(curTime)

curDay = Day(curTime)

GongliStr = curYear & "年"

If (curMonth < 10) Then

GongliStr = GongliStr & "0" & curMonth & "月"

Else

GongliStr = GongliStr & curMonth & "月"

End If

If (curDay < 10) Then

GongliStr = GongliStr & "0" & curDay & "日"

Else

GongliStr = GongliStr & curDay & "日"

End If

'生成當前公歷星期 ==> WeekdayStr

curWeekday = Weekday(curTime)

WeekdayStr = WeekName(curWeekday)

'計算到初始時間1921年2月8日的天數:1921-2-8(正月初壹)

TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38

If ((curYear Mod 4) = 0 And curMonth > 2) Then

TheDate = TheDate + 1

End If

'計算農歷天幹、地支、月、日

isEnd = 0

m = 0

Do

If (NongliData(m) < 4095) Then

k = 11

Else

k = 12

End If

n = k

Do

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)

Next

bit = bit Mod 2

If (TheDate <= 29 + bit) Then

isEnd = 1

Exit Do

End If

TheDate = TheDate - 29 - bit

n = n - 1

Loop

If (isEnd = 1) Then

Exit Do

End If

m = m + 1

Loop

curYear = 1921 + m

curMonth = k - n + 1

curDay = TheDate

If (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 If

End If

'生成農歷天幹、地支、屬相 ==> NongliStr

NongliStr = TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"

NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"

'NongliStr = "農歷" & NongliStr NongliStr是農歷的年

'生成農歷月、日 ==> NongliDayStr

If (curMonth < 1) Then

NongliDayStr = "閏" & MonName(-1 * curMonth)

Else

NongliDayStr = MonName(curMonth)

End If

NongliMonStr = NongliDayStr & "月"

NongliDayStr = DayName(curDay) 'NongliDayStr就是月日

'GongliStr = "公歷" & GongliStr '這裏是公歷日期

'wyear = NongliStr & NongliDayStr & vbCrLf & GongliStr

'wyear = NongliStr & NongliDayStr

Select Case YearOrDay

Case 0

wYear = NongliStr & NongliMonStr & NongliDayStr

Case 1

wYear = NongliStr

Case 2

wYear = NongliMonStr & NongliDayStr

Case 3

Select Case NongliMonStr & NongliDayStr

Case "正月初壹", "閏正月初壹"

wYear = "春節"

Case "正月十五", "閏正月十五"

wYear = "元宵節"

Case "五月初五", "閏五月初五"

wYear = "端午節"

Case "七月初七", "閏七月初七"

wYear = "七夕節"

Case "七月十五", "閏七月十五"

wYear = "中元節"

Case "八月十五", "閏八月十五"

wYear = "中秋節"

Case "九月初九", "閏九月初九"

wYear = "重陽節"

Case "臘月初八", "閏臘月初八"

wYear = "臘八節"

Case "臘月廿三", "閏臘月廿三"

wYear = "小年"

Case "臘月三十", "閏臘月三十"

wYear = "除夕"

Case Else

wYear = ""

End Select

Case 4

wYear = NongliMonStr

Case 5

wYear = NongliDayStr

End Select

End Function

Function sGongliJieri(sD As Date)

Dim sJieriDay(100), sJieriName(100)

sJieriDay(0) = ""

sJieriDay(1) = "0101"

sJieriDay(2) = "0202"

sJieriDay(3) = "0210"

sJieriDay(4) = "0214"

sJieriDay(5) = "0301"

sJieriDay(6) = "0303"

sJieriDay(7) = "0305"

sJieriDay(8) = "0308"

sJieriDay(9) = "0312"

sJieriDay(10) = "0314"

sJieriDay(11) = "0315"

sJieriDay(12) = "0317"

sJieriDay(13) = "0321"

sJieriDay(14) = "0322"

sJieriDay(15) = "0323"

sJieriDay(16) = "0324"

sJieriDay(17) = "0325"

sJieriDay(18) = "0330"

sJieriDay(19) = "0401"

sJieriDay(20) = "0407"

sJieriDay(21) = "0422"

sJieriDay(22) = "0423"

sJieriDay(23) = "0424"

sJieriDay(24) = "0501"

sJieriDay(25) = "0504"

sJieriDay(26) = "0505"

sJieriDay(27) = "0508"

sJieriDay(28) = "0512"

sJieriDay(29) = "0515"

sJieriDay(30) = "0517"

sJieriDay(31) = "0518"

sJieriDay(32) = "0520"

sJieriDay(33) = "0523"

sJieriDay(34) = "0531"

sJieriDay(35) = "0601"

sJieriDay(36) = "0605"

sJieriDay(37) = "0606"

sJieriDay(38) = "0617"

sJieriDay(39) = "0623"

sJieriDay(40) = "0625"

sJieriDay(41) = "0626"

sJieriDay(42) = "0701"

sJieriDay(43) = "0702"

sJieriDay(44) = "0707"

sJieriDay(45) = "0711"

sJieriDay(46) = "0730"

sJieriDay(47) = "0801"

sJieriDay(48) = "0808"

sJieriDay(49) = "0815"

sJieriDay(50) = "0908"

sJieriDay(51) = "0909"

sJieriDay(52) = "0910"

sJieriDay(53) = "0914"

sJieriDay(54) = "0916"

sJieriDay(55) = "0918"

sJieriDay(56) = "0920"

sJieriDay(57) = "0927"

sJieriDay(58) = "0928"

sJieriDay(59) = "1001"

sJieriDay(60) = "1002"

sJieriDay(61) = "1003"

sJieriDay(62) = "1004"

sJieriDay(63) = "1006"

sJieriDay(64) = "1008"

sJieriDay(65) = "1009"

sJieriDay(66) = "1010"

sJieriDay(67) = "1013"

sJieriDay(68) = "1014"

sJieriDay(69) = "1015"

sJieriDay(70) = "1016"

sJieriDay(71) = "1017"

sJieriDay(72) = "1022"

sJieriDay(73) = "1024"

sJieriDay(74) = "1031"

sJieriDay(75) = "1107"

sJieriDay(76) = "1108"

sJieriDay(77) = "1109"

sJieriDay(78) = "1110"

sJieriDay(79) = "1111"

sJieriDay(80) = "1112"

sJieriDay(81) = "1114"

sJieriDay(82) = "1117"

sJieriDay(83) = "1120"

sJieriDay(84) = "1121"

sJieriDay(85) = "1122"

sJieriDay(86) = "1129"

sJieriDay(87) = "1201"

sJieriDay(88) = "1203"

sJieriDay(89) = "1205"

sJieriDay(90) = "1208"

sJieriDay(91) = "1209"

sJieriDay(92) = "1210"

sJieriDay(93) = "1212"

sJieriDay(94) = "1213"

sJieriDay(95) = "1220"

sJieriDay(96) = "1221"

sJieriDay(97) = "1224"

sJieriDay(98) = "1225"

sJieriDay(99) = "1226"

sJieriName(0) = ""

sJieriName(1) = "元旦節"

sJieriName(2) = "世界濕地日"

sJieriName(3) = "國際氣象節"

sJieriName(4) = "情人節"

sJieriName(5) = "國際海豹日"

sJieriName(6) = "全國愛耳日"

sJieriName(7) = "學雷鋒紀念日"

sJieriName(8) = "婦女節"

sJieriName(9) = "植樹節,孫中山逝世紀念日"

sJieriName(10) = "國際警察日"

sJieriName(11) = "消費者權益日"

sJieriName(12) = "中國國醫節,國際航海日"

sJieriName(13) = "世界森林日,消除種族歧視國際日,世界兒歌日"

sJieriName(14) = "世界水日"

sJieriName(15) = "世界氣象日"

sJieriName(16) = "世界防治結核病日"

sJieriName(17) = "全國中小學生安全教育日"

sJieriName(18) = "巴勒斯坦國土日"

sJieriName(19) = "愚人節"

sJieriName(20) = "世界衛生日"

sJieriName(21) = "世界地球日"

sJieriName(22) = "世界圖書和版權日"

sJieriName(23) = "亞非新聞工作者日"

sJieriName(24) = "勞動節"

sJieriName(25) = "青年節"

sJieriName(26) = "碘缺乏病防治日"

sJieriName(27) = "世界紅十字日"

sJieriName(28) = "國際護士節"

sJieriName(29) = "國際家庭日"

sJieriName(30) = "國際電信日"

sJieriName(31) = "國際博物館日"

sJieriName(32) = "全國學生營養日"

sJieriName(33) = "國際牛奶日"

sJieriName(34) = "世界無煙日"

sJieriName(35) = "國際兒童節"

sJieriName(36) = "世界環境保護日"

sJieriName(37) = "全國愛眼日"

sJieriName(38) = "防治荒漠化和幹旱日"

sJieriName(39) = "國際奧林匹克日"

sJieriName(40) = "全國土地日"

sJieriName(41) = "國際禁毒日"

sJieriName(42) = "香港回歸紀念日,中***誕辰,世界建築日"

sJieriName(43) = "國際體育記者日"

sJieriName(44) = "抗日戰爭紀念日"

sJieriName(45) = "世界人口日"

sJieriName(46) = "非洲婦女日"

sJieriName(47) = "建軍節"

sJieriName(48) = "中國男子節(爸爸節)"

sJieriName(49) = "抗日戰爭勝利紀念"

sJieriName(50) = "國際掃盲日,國際新聞工作者日"

sJieriName(51) = "毛澤東逝世紀念"

sJieriName(52) = "中國教師節"

sJieriName(53) = "世界清潔地球日"

sJieriName(54) = "國際臭氧層保護日"

sJieriName(55) = "九壹八事變紀念日"

sJieriName(56) = "國際愛牙日"

sJieriName(57) = "世界旅遊日"

sJieriName(58) = "孔子誕辰"

sJieriName(59) = "國慶節音樂日,老人節"

sJieriName(60) = "和平與民主自由鬥爭日"

sJieriName(61) = "國慶節假日"

sJieriName(62) = "世界動物日"

sJieriName(63) = "老人節"

sJieriName(64) = "全國高血壓日,世界視覺日"

sJieriName(65) = "世界郵政日,萬國郵聯日"

sJieriName(66) = "辛亥革命紀念日,世界精神衛生日"

sJieriName(67) = "世界保健日,國際教師節"

sJieriName(68) = "世界標準日"

sJieriName(69) = "國際盲人節(白手杖節)"

sJieriName(70) = "世界糧食日"

sJieriName(71) = "世界消除貧困日"

sJieriName(72) = "世界傳統醫藥日"

sJieriName(73) = "聯合國日"

sJieriName(74) = "世界勤儉日"

sJieriName(75) = "十月社會主義革命紀念日"

sJieriName(76) = "中國記者日"

sJieriName(77) = "全國消防安全宣傳教育日"

sJieriName(78) = "世界青年節"

sJieriName(79) = "國際科學與和平周(本日所屬的壹周)"

sJieriName(80) = "孫中山誕辰紀念日"

sJieriName(81) = "世界糖尿病日"

sJieriName(82) = "國際大學生節,世界學生節"

sJieriName(83) = "彜族年"

sJieriName(84) = "世界問候日,世界電視日"

sJieriName(85) = "彜族年"

sJieriName(86) = "國際聲援巴勒斯坦人民國際日"

sJieriName(87) = "世界艾滋病日"

sJieriName(88) = "世界殘疾人日"

sJieriName(89) = "國際經濟和社會發展誌願人員日"

sJieriName(90) = "國際兒童電視日"

sJieriName(91) = "世界足球日"

sJieriName(92) = "世界人權日"

sJieriName(93) = "西安事變紀念日"

sJieriName(94) = "南京大屠殺193紀念日"

sJieriName(95) = "澳門回歸紀念"

sJieriName(96) = "國際籃球日"

sJieriName(97) = "平安夜"

sJieriName(98) = "聖誕節"

sJieriName(99) = "毛澤東誕辰紀念"

For i = 1 To 99

sJieriDay1 = Left(sJieriDay(i), 2) & "-" & Right(sJieriDay(i), 2)

nDay = CInt(CDate(sJieriDay1 & "-" & Year(sD)) - CDate(Month(sD) & "-" & Day(sD) & "-" & Year(sD)))

If nDay = 0 Then

sGongliJieri = "今天" & sJieriName(i)

Exit Function

ElseIf nDay > 0 Then

sGongliJieri = "差" & nDay & "天" & sJieriName(i)

Exit Function

End If

Next

End Function