农历的算法
Private Sub Form_Load()<br/> Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)<br/> Dim curTime, curYear, curMonth, curDay, curWeekday<br/> Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr<br/> Dim i, m, n, k, isEnd, bit, TheDate <br/> <br/> '获取当前系统时间<br/> curTime = Now()<br/> '星期名<br/> WeekName(0) = " * "<br/> WeekName(1) = "星期日"<br/> WeekName(2) = "星期一"<br/> WeekName(3) = "星期二"<br/> WeekName(4) = "星期三"<br/> WeekName(5) = "星期四"<br/> WeekName(6) = "星期五"<br/> WeekName(7) = "星期六"<br/> '天干名称<br/> TianGan(0) = "甲"<br/> TianGan(1) = "乙"<br/> TianGan(2) = "丙"<br/> TianGan(3) = "丁"<br/> TianGan(4) = "戊"<br/> TianGan(5) = "己"<br/> TianGan(6) = "庚"<br/> TianGan(7) = "辛"<br/> TianGan(8) = "壬"<br/> TianGan(9) = "癸"<br/> '地支名称<br/> DiZhi(0) = "子"<br/> DiZhi(1) = "丑"<br/> DiZhi(2) = "寅"<br/> DiZhi(3) = "卯"<br/> DiZhi(4) = "辰"<br/> DiZhi(5) = "巳"<br/> DiZhi(6) = "午"<br/> DiZhi(7) = "未"<br/> DiZhi(8) = "申"<br/> DiZhi(9) = "酉"<br/> DiZhi(10) = "戌"<br/> DiZhi(11) = "亥"<br/> '属相名称<br/> ShuXiang(0) = "鼠"<br/> ShuXiang(1) = "牛"<br/> ShuXiang(2) = "虎"<br/> ShuXiang(3) = "兔"<br/> ShuXiang(4) = "龙"<br/> ShuXiang(5) = "蛇"<br/> ShuXiang(6) = "马"<br/> ShuXiang(7) = "羊"<br/> ShuXiang(8) = "猴"<br/> ShuXiang(9) = "鸡"<br/> ShuXiang(10) = "狗"<br/> ShuXiang(11) = "猪"<br/> '农历日期名<br/> DayName(0) = "*"<br/> DayName(1) = "初一"<br/> DayName(2) = "初二"<br/> DayName(3) = "初三"<br/> DayName(4) = "初四"<br/> DayName(5) = "初五"<br/> DayName(6) = "初六"<br/> DayName(7) = "初七"<br/> DayName(8) = "初八"<br/> DayName(9) = "初九"<br/> DayName(10) = "初十"<br/> DayName(11) = "十?quot;"<br/> DayName(12) = "十二"<br/> DayName(13) = "十三"<br/> DayName(14) = "十四"<br/> DayName(15) = "十五"<br/> DayName(16) = "十六"<br/> DayName(17) = "十七"<br/> DayName(18) = "十八"<br/> DayName(19) = "十九"<br/> DayName(20) = "二十"<br/> DayName(21) = "廿一"<br/> DayName(22) = "廿二"<br/> DayName(23) = "廿三"<br/> DayName(24) = "廿四"<br/> DayName(25) = "廿五"<br/> DayName(26) = "廿六"<br/> DayName(27) = "廿七"<br/> DayName(28) = "廿八"<br/> DayName(29) = "廿九"<br/> DayName(30) = "三十"<br/> '农历月份名<br/> MonName(0) = "*"<br/> MonName(1) = "正"<br/> MonName(2) = "二"<br/> MonName(3) = "三"<br/> MonName(4) = "四"<br/> MonName(5) = "五"<br/> MonName(6) = "六"<br/> MonName(7) = "七"<br/> MonName(8) = "八"<br/> MonName(9) = "九"<br/> MonName(10) = "十"<br/> MonName(11) = "十一"<br/> MonName(12) = "腊"<br/> '公历每月前面的天数<br/> MonthAdd(0) = 0<br/> MonthAdd(1) = 31<br/> MonthAdd(2) = 59<br/> MonthAdd(3) = 90<br/> MonthAdd(4) = 120<br/> MonthAdd(5) = 151<br/> MonthAdd(6) = 181<br/> MonthAdd(7) = 212<br/> MonthAdd(8) = 243<br/> MonthAdd(9) = 273<br/> MonthAdd(10) = 304<br/> MonthAdd(11) = 334<br/> '农历数据<br/> NongliData(0) = 2635<br/> NongliData(1) = 333387<br/> NongliData(2) = 1701<br/> NongliData(3) = 1748<br/> NongliData(4) = 267701<br/> NongliData(5) = 694<br/> NongliData(6) = 2391<br/> NongliData(7) = 133423<br/> NongliData(8) = 1175<br/> NongliData(9) = 396438<br/> NongliData(10) = 3402<br/> NongliData(11) = 3749<br/> NongliData(12) = 331177<br/> NongliData(13) = 1453<br/> NongliData(14) = 694<br/> NongliData(15) = 201326<br/> NongliData(16) = 2350<br/> NongliData(17) = 465197<br/> NongliData(18) = 3221<br/> NongliData(19) = 3402<br/> NongliData(20) = 400202<br/> NongliData(21) = 2901<br/> NongliData(22) = 1386<br/> NongliData(23) = 267611<br/> NongliData(24) = 605<br/> NongliData(25) = 2349<br/> NongliData(26) = 137515<br/> NongliData(27) = 2709<br/> NongliData(28) = 464533<br/> NongliData(29) = 1738<br/> NongliData(30) = 2901<br/> NongliData(31) = 330421<br/> NongliData(32) = 1242<br/> NongliData(33) = 2651<br/> NongliData(34) = 199255<br/> NongliData(35) = 1323<br/> NongliData(36) = 529706<br/> NongliData(37) = 3733<br/> NongliData(38) = 1706<br/> NongliData(39) = 398762<br/> NongliData(40) = 2741<br/> NongliData(41) = 1206<br/> NongliData(42) = 267438<br/> NongliData(43) = 2647<br/> NongliData(44) = 1318<br/> NongliData(45) = 204070<br/> NongliData(46) = 3477<br/> NongliData(47) = 461653<br/> NongliData(48) = 1386<br/> NongliData(49) = 2413<br/> NongliData(50) = 330077<br/> NongliData(51) = 1197<br/> NongliData(52) = 2637<br/> NongliData(53) = 268877<br/> NongliData(54) = 3365<br/> NongliData(55) = 531109<br/> NongliData(56) = 2900<br/> NongliData(57) = 2922<br/> NongliData(58) = 398042<br/> NongliData(59) = 2395<br/> NongliData(60) = 1179<br/> NongliData(61) = 267415<br/> NongliData(62) = 2635<br/> NongliData(63) = 661067<br/> NongliData(64) = 1701<br/> NongliData(65) = 1748<br/> NongliData(66) = 398772<br/> NongliData(67) = 2742<br/> NongliData(68) = 2391<br/> NongliData(69) = 330031<br/> NongliData(70) = 1175<br/> NongliData(71) = 1611<br/> NongliData(72) = 200010<br/> NongliData(73) = 3749<br/> NongliData(74) = 527717<br/> NongliData(75) = 1452<br/> NongliData(76) = 2742<br/> NongliData(77) = 332397<br/> NongliData(78) = 2350<br/> NongliData(79) = 3222<br/> NongliData(80) = 268949<br/> NongliData(81) = 3402<br/> NongliData(82) = 3493<br/> NongliData(83) = 133973<br/> NongliData(84) = 1386<br/> NongliData(85) = 464219<br/> NongliData(86) = 605<br/> NongliData(87) = 2349<br/> NongliData(88) = 334123<br/> NongliData(89) = 2709<br/> NongliData(90) = 2890<br/> NongliData(91) = 267946<br/> NongliData(92) = 2773<br/> NongliData(93) = 592565<br/> NongliData(94) = 1210<br/> NongliData(95) = 2651<br/> NongliData(96) = 395863<br/> NongliData(97) = 1323<br/> NongliData(98) = 2707<br/> NongliData(99) = 265877<br/> '生成当前公历年、月、日 ==> GongliStr<br/> curYear = Year(curTime)<br/> curMonth = Month(curTime)<br/> curDay = Day(curTime)<br/> GongliStr = curYear & "年"<br/> If (curMonth < 10) Then<br/> GongliStr = GongliStr & "0" & curMonth & "月"<br/> Else<br/> GongliStr = GongliStr & curMonth & "月"<br/> End If<br/> If (curDay < 10) Then<br/> GongliStr = GongliStr & "0" & curDay & "日"<br/> Else<br/> GongliStr = GongliStr & curDay & "日"<br/> End If<br/> '生成当前公历星期 ==> WeekdayStr<br/> curWeekday = Weekday(curTime)<br/> WeekdayStr = WeekName(curWeekday)<br/> '计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)<br/> TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38<br/> If ((curYear Mod 4) = 0 And curMonth > 2) Then<br/> TheDate = TheDate + 1<br/> End If<br/> '计算农历天干、地支、月、日<br/> isEnd = 0<br/> m = 0<br/> Do<br/> If (NongliData(m) < 4095) Then<br/> k = 11<br/> Else<br/> k = 12<br/> End If<br/> n = k<br/> Do<br/> If (n < 0) Then<br/> Exit Do<br/> End If<br/> '获取NongliData(m)的第n个二进制位的值<br/> bit = NongliData(m)<br/> For i = 1 To n Step 1<br/> bit = Int(bit / 2)<br/> Next<br/> bit = bit Mod 2<br/> If (TheDate <= 29 + bit) Then<br/> isEnd = 1<br/> Exit Do<br/> End If<br/> TheDate = TheDate - 29 - bit<br/> n = n - 1<br/> Loop<br/> If (isEnd = 1) Then<br/> Exit Do<br/> End If<br/> m = m + 1<br/> Loop<br/> curYear = 1921 + m<br/> curMonth = k - n + 1<br/> curDay = TheDate<br/> If (k = 12) Then<br/> If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then<br/> curMonth = 1 - curMonth<br/> ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then<br/> curMonth = curMonth - 1<br/> End If<br/> End If<br/> '生成农历天干、地支、属相 ==> NongliStr<br/> NongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"<br/> NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"<br/> '生成农历月、日 ==> NongliDayStr<br/> If (curMonth < 1) Then<br/> NongliDayStr = "闰" & MonName( -1 * curMonth)<br/> Else<br/> NongliDayStr = MonName(curMonth)<br/> End If<br/> NongliDayStr = NongliDayStr & "月"<br/> NongliDayStr = NongliDayStr & DayName(curDay)<br/> MsgBox NongliStr & NongliDayStr<br/> <br/>End Sub 学VB有用吗?敢情问一下/ <p>那么学什么才有用呢?</p><p>那么什么才叫"有用"呢?</p><p>这个问题虽然早已经过时了</p><p>如果愿意讨论,也欢迎!</p>
页:
[1]