转载-公历转换农历VB示例 公历转农历函数

   2023-02-09 学习力0
核心提示:Option ExplicitPrivate LunarInfo(1 To 150) As Double '从1900-2049年这150年的农历信息码Private SolarMonth(1 To 12) As Integer '阳历12个月的天数Private Gan(1 To 10) As String '农历的天干Private Zhi(1 To 12) As String '农历的地支Private Animal
Option Explicit
Private LunarInfo(1 To 150) As Double '从1900-2049年这150年的农历信息码
Private SolarMonth(1 To 12) As Integer '阳历12个月的天数
Private Gan(1 To 10) As String '农历的天干
Private Zhi(1 To 12) As String '农历的地支
Private Animals(1 To 12) As String '农历的属象
Private SolarTerm(1 To 24) As String '阳历的节气

Private sTermInfo(1 To 24) As Double '阳历节气的信息码
Private nStr1(1 To 11) As String '从日一到十
Private nStr2(1 To 5) As String '初十廿卅 '
Private MonthName(1 To 12) As String '每个月的英文名称

Private sFtv(1 To 30) As String '阳历的节日
Private lFtv(1 To 30) As String '农历的节日
Private wFtv(1 To 30) As String '西方的节日


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, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate
Dim settime As Date
'--将农历信息从16进制转换成10进制
Public Function c16to10(shuju As String)
    Dim s  As String
    Dim d  As Integer
    Dim da As Long

    For i = 3 To 7
        s = Mid(shuju, i, 1)

        Select Case i

            Case 3

                If s < "9" And s > "0" Then
                    d = CInt(s)
                Else

                    If s = "a" Then d = 10
                    If s = "b" Then d = 11
                    If s = "c" Then d = 12
                    If s = "d" Then d = 13
                    If s = "e" Then d = 14
                    If s = "f" Then d = 15
                End If

                da = da + d * 16 ^ 4

            Case 4

                If s < "9" And s > "0" Then
                    d = CInt(s)
                Else

                    If s = "a" Then d = 10
                    If s = "b" Then d = 11
                    If s = "c" Then d = 12
                    If s = "d" Then d = 13
                    If s = "e" Then d = 14
                    If s = "f" Then d = 15
                End If

                da = da + d * 16 ^ 3

            Case 5

                If s < "9" And s > "0" Then
                    d = CInt(s)
                Else

                    If s = "a" Then d = 10
                    If s = "b" Then d = 11
                    If s = "c" Then d = 12
                    If s = "d" Then d = 13
                    If s = "e" Then d = 14
                    If s = "f" Then d = 15
                End If

                da = da + d * 16 ^ 2

            Case 6

                If s < "9" And s > "0" Then
                    d = CInt(s)
                Else

                    If s = "a" Then d = 10
                    If s = "b" Then d = 11
                    If s = "c" Then d = 12
                    If s = "d" Then d = 13
                    If s = "e" Then d = 14
                    If s = "f" Then d = 15
                End If

                da = da + d * 16 ^ 1

            Case 7

                If s < "9" And s > "0" Then
                    d = CInt(s)
                Else

                    If s = "a" Then d = 10
                    If s = "b" Then d = 11
                    If s = "c" Then d = 12
                    If s = "d" Then d = 13
                    If s = "e" Then d = 14
                    If s = "f" Then d = 15
                End If

                da = da + d * 1
        End Select

    Next i

    c16to10 = da
End Function

Private Sub read_data()
    Dim s1, s2, s3 As String
    s1 = "小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至"
    s2 = "000000,021208,042467,063836,085337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758"
    s3 = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC"

    For i = 1 To 24
        SolarTerm(i) = Mid(s1, (i - 1) * 2 + 1, 2)  '节气
        sTermInfo(i) = Val(Mid(s2, (i - 1) * 7 + 1, 6))

        If i <= 12 Then MonthName(i) = Mid(s3, (i - 1) * 4 + 1, 3)
    Next i

    '阳历节日:前四位数字为阳历的MMDD(月日),后面的文字为意义
    sFtv(1) = "0101元旦"
    sFtv(2) = "0214情人节"
    sFtv(3) = "0308国际劳动妇女节"
    sFtv(4) = "0312中国植树节"
    sFtv(5) = "0315权益日"
    sFtv(6) = ""
    sFtv(7) = "0401国际愚人节"
    sFtv(8) = "0501国际劳动节"
    sFtv(9) = "0504五四青年节"
    sFtv(10) = "0512护士节"
    sFtv(11) = "0601儿童节"
    sFtv(12) = "0701中国建党节,香港回归"
    sFtv(13) = "0718托普诞辰"
    sFtv(14) = "0801中国建军节"
    sFtv(15) = "0808父亲节"
    sFtv(16) = "0909毛逝世纪念"
    sFtv(17) = "0910教师节"
    'sFtv(17) ="0918九·一八事变(中国国耻日)"
    sFtv(18) = "0928孔子诞辰"
    sFtv(19) = "1001中国国庆节"
    sFtv(20) = "1006老人节"
    sFtv(21) = "1024联合国日"
    'sFtv(21) = "1031万圣节"
    sFtv(22) = "1112孙中山诞辰"
    'sFtv(21) = "1212西安事变纪念日"
    'sFtv(21) = "南京大***纪念日"
    sFtv(23) = "1220澳门回归"
    'sFtv(21) = "平安夜"
    sFtv(24) = "1225圣诞节"
    sFtv(25) = "1226毛诞辰纪念"

    '农历的节日:日期表示的是农历的某月某日
    lFtv(1) = "0101春节"
    lFtv(2) = "0115元宵节"
    lFtv(3) = "0505端午节"
    lFtv(4) = "0707七夕节"
    lFtv(5) = "0715中元节"
    lFtv(6) = "0815中秋节"
    lFtv(7) = "0909重阳节"
    lFtv(8) = ""
    lFtv(9) = "1208腊八节"
    lFtv(10) = "1224小年"
    lFtv(11) = "0100除夕"

    '按星期计算的节日:如0231表示阳历02月份的第三个星期一
    wFtv(1) = ""
    wFtv(2) = "0231总统日"
    wFtv(3) = "0520母亲节"
    wFtv(4) = "0637父亲节"
    wFtv(5) = "0531胜利日"
    wFtv(6) = "0716合作节"
    wFtv(7) = "0730被奴周"
    wFtv(8) = ""
    wFtv(9) = ""
    wFtv(10) = "1021哥伦布日"
    wFtv(11) = "1144感恩节"

    LunarInfo(1) = c16to10("ox04bd8")
    LunarInfo(2) = c16to10("ox04ae0")
    LunarInfo(3) = c16to10("ox0a570")
    LunarInfo(4) = c16to10("ox054d5")
    LunarInfo(5) = c16to10("ox0d260")
    LunarInfo(6) = c16to10("ox0d950")
    LunarInfo(7) = c16to10("ox16554")
    LunarInfo(8) = c16to10("ox056a0")
    LunarInfo(9) = c16to10("ox09ad0")
    LunarInfo(10) = c16to10("ox055d2")

    LunarInfo(11) = c16to10("ox04ae0")
    LunarInfo(12) = c16to10("ox0a5b6")
    LunarInfo(13) = c16to10("ox0a4d0")
    LunarInfo(14) = c16to10("ox0d250")
    LunarInfo(15) = c16to10("ox1d255")
    LunarInfo(16) = c16to10("ox0b540")
    LunarInfo(17) = c16to10("ox0d6a0")
    LunarInfo(18) = c16to10("ox0ada2")
    LunarInfo(19) = c16to10("ox095b0")
    LunarInfo(20) = c16to10("ox14977")

    LunarInfo(21) = c16to10("ox04970")
    LunarInfo(22) = c16to10("ox0a4b0")
    LunarInfo(23) = c16to10("ox0b4b5")
    LunarInfo(24) = c16to10("ox06a50")
    LunarInfo(25) = c16to10("ox06d40")
    LunarInfo(26) = c16to10("ox1ab54")
    LunarInfo(27) = c16to10("ox02b60")
    LunarInfo(28) = c16to10("ox09570")
    LunarInfo(29) = c16to10("ox052f2")
    LunarInfo(30) = c16to10("ox04970")

    LunarInfo(31) = c16to10("ox06566")
    LunarInfo(32) = c16to10("ox0d4a0")
    LunarInfo(33) = c16to10("ox0ea50")
    LunarInfo(34) = c16to10("ox06e95")
    LunarInfo(35) = c16to10("ox05ad0")
    LunarInfo(36) = c16to10("ox02b60")
    LunarInfo(37) = c16to10("ox186e3")
    LunarInfo(38) = c16to10("ox092e0")
    LunarInfo(39) = c16to10("ox1c8d7")
    LunarInfo(40) = c16to10("ox0c950")

    LunarInfo(41) = c16to10("ox0d4a0")
    LunarInfo(42) = c16to10("ox1d8a6")
    LunarInfo(43) = c16to10("ox0b550")
    LunarInfo(44) = c16to10("ox056a0")
    LunarInfo(45) = c16to10("ox1a5b4")
    LunarInfo(46) = c16to10("ox025d0")
    LunarInfo(47) = c16to10("ox092d0")
    LunarInfo(48) = c16to10("ox0d2b2")
    LunarInfo(49) = c16to10("ox0a950")
    LunarInfo(50) = c16to10("ox0b557")

    LunarInfo(51) = c16to10("ox06ca0")
    LunarInfo(52) = c16to10("ox0b550")
    LunarInfo(53) = c16to10("ox15355")
    LunarInfo(54) = c16to10("ox04da0")
    LunarInfo(55) = c16to10("ox0a5d0")
    LunarInfo(56) = c16to10("ox14573")
    LunarInfo(57) = c16to10("ox052d0")
    LunarInfo(58) = c16to10("ox0a9a8")
    LunarInfo(59) = c16to10("ox0e950")
    LunarInfo(60) = c16to10("ox06aa0")

    LunarInfo(61) = c16to10("ox0aea6")
    LunarInfo(62) = c16to10("ox0ab50")
    LunarInfo(63) = c16to10("ox04b60")
    LunarInfo(64) = c16to10("ox0aae4")
    LunarInfo(65) = c16to10("ox0a570")
    LunarInfo(66) = c16to10("ox05260")
    LunarInfo(67) = c16to10("ox0f263")
    LunarInfo(68) = c16to10("ox0d950")
    LunarInfo(69) = c16to10("ox05b57")
    LunarInfo(70) = c16to10("ox056a0")

    LunarInfo(71) = c16to10("ox096d0")
    LunarInfo(72) = c16to10("ox04dd5")
    LunarInfo(73) = c16to10("ox04ad0")
    LunarInfo(74) = c16to10("ox0a4d0")
    LunarInfo(75) = c16to10("ox0d4d4")
    LunarInfo(76) = c16to10("ox0d250")
    LunarInfo(77) = c16to10("ox0d558")
    LunarInfo(78) = c16to10("ox0b540")
    LunarInfo(79) = c16to10("ox0b5a0")
    LunarInfo(80) = c16to10("ox195a6")

    LunarInfo(81) = c16to10("ox095b0")
    LunarInfo(82) = c16to10("ox049b0")
    LunarInfo(83) = c16to10("ox0a974")
    LunarInfo(84) = c16to10("ox0a4b0")
    LunarInfo(85) = c16to10("ox0b27a")
    LunarInfo(86) = c16to10("ox06a50")
    LunarInfo(87) = c16to10("ox06d40")
    LunarInfo(88) = c16to10("ox0af46")
    LunarInfo(89) = c16to10("ox0ab60")
    LunarInfo(90) = c16to10("ox09570")

    LunarInfo(91) = c16to10("ox04af5")
    LunarInfo(92) = c16to10("ox04970")
    LunarInfo(93) = c16to10("ox064b0")
    LunarInfo(94) = c16to10("ox074a3")
    LunarInfo(95) = c16to10("ox0ea50")
    LunarInfo(96) = c16to10("ox06b58")
    LunarInfo(97) = c16to10("ox055c0")
    LunarInfo(98) = c16to10("ox0ab60")
    LunarInfo(99) = c16to10("ox096d5")
    LunarInfo(100) = c16to10("ox092e0")

    LunarInfo(101) = c16to10("ox0c960")
    LunarInfo(102) = c16to10("ox0d954")
    LunarInfo(103) = c16to10("ox0d4a0")
    LunarInfo(104) = c16to10("ox0da50")
    LunarInfo(105) = c16to10("ox07552")
    LunarInfo(106) = c16to10("ox056a0")
    LunarInfo(107) = c16to10("ox0abb7")
    LunarInfo(108) = c16to10("ox025d0")
    LunarInfo(109) = c16to10("ox092d0")
    LunarInfo(110) = c16to10("ox0cab5")

    LunarInfo(111) = c16to10("ox0a950")
    LunarInfo(112) = c16to10("ox0b4a0")
    LunarInfo(113) = c16to10("ox0baa4")
    LunarInfo(114) = c16to10("ox0ad50")
    LunarInfo(115) = c16to10("ox055d9")
    LunarInfo(116) = c16to10("ox04ba0")
    LunarInfo(117) = c16to10("ox0a5b0")
    LunarInfo(118) = c16to10("ox15176")
    LunarInfo(119) = c16to10("ox052b0")
    LunarInfo(120) = c16to10("ox0a930")

    LunarInfo(121) = c16to10("ox07954")
    LunarInfo(122) = c16to10("ox06aa0")
    LunarInfo(123) = c16to10("ox0ad50")
    LunarInfo(124) = c16to10("ox05b52")
    LunarInfo(125) = c16to10("ox04b60")
    LunarInfo(126) = c16to10("ox0a6e6")
    LunarInfo(127) = c16to10("ox0a4e0")
    LunarInfo(128) = c16to10("ox0d260")
    LunarInfo(129) = c16to10("ox0ea65")
    LunarInfo(130) = c16to10("ox0d530")

    LunarInfo(131) = c16to10("ox05aa0")
    LunarInfo(132) = c16to10("ox076a3")
    LunarInfo(133) = c16to10("ox096d0")
    LunarInfo(134) = c16to10("ox04bd7")
    LunarInfo(135) = c16to10("ox04ad0")
    LunarInfo(136) = c16to10("ox0a4d0")
    LunarInfo(137) = c16to10("ox1d0b6")
    LunarInfo(138) = c16to10("ox0d250")
    LunarInfo(139) = c16to10("ox0d520")
    LunarInfo(140) = c16to10("ox0dd45")

    LunarInfo(141) = c16to10("ox0b5a0")
    LunarInfo(142) = c16to10("ox056d0")
    LunarInfo(143) = c16to10("ox055b2")
    LunarInfo(144) = c16to10("ox049b0")
    LunarInfo(145) = c16to10("ox0a577")
    LunarInfo(146) = c16to10("ox0a4b0")
    LunarInfo(147) = c16to10("ox0aa50")
    LunarInfo(148) = c16to10("ox1b255")
    LunarInfo(149) = c16to10("ox06d20")
    LunarInfo(150) = c16to10("ox0ada0")

End Sub
'传回农历 y年m月的总天数
Function lMonthDays(ByVal Y As Integer) As Integer
If Y < 1900 Then Y = 1900
If (LunarInfo(Y - 1900 + 1) And Int(&H10000 / (2 ^ 12))) = 0 Then
lMonthDays = 29
Else
lMonthDays = 30
End If
End Function
'某y年的第n个节气的日期(从1小寒起算)
Function sTerm(ByVal Y, n As Integer) As Date
Dim D1, D2 As Double
D1 = (31556925.9747 * (Y - 1900) + sTermInfo(n) * 60#)
D2 = DateDiff("s", "1970-1-1 0:0", "1900-1-6 2:5") + D1
D1 = D2 / 2
sTerm = DateAdd("s", D2 - D1, DateAdd("s", D1, "1970-1-1 0:0"))
sTerm = Format(sTerm, "yyyy/mm/dd")
End Function
'根据阳历返回其节气,若不是则返回空
Function GetTerm(ByVal sDate As Date) As String
Dim Y, m As Integer
Y = Year(sDate)
m = Month(sDate)
GetTerm = " "
If sTerm(Y, m * 2 - 1) = sDate Then
GetTerm = SolarTerm(m * 2 - 1)
ElseIf sTerm(Y, m * 2) = sDate Then
GetTerm = SolarTerm(m * 2)
End If
End Function
'返回阳历是该月的第几个星期几的字符串,如:0520表示5月份第2个星期日
Function GetMonthWeek(ByVal sDate As Date) As String
Dim D0 As Date
D0 = CDate(Year(sDate) & "-" & Month(sDate) & "-1")
GetMonthWeek = Format(Month(sDate), "00") & (Int((Day(sDate) - 1 + Weekday(D0) - 1) / 7) + 1) & Weekday(sDate) - 1
End Function

Private Sub riliLoad(curtime As Date)
    Dim mons        As String
    Dim Twftv       As String
    Dim TLftv       As String
    Dim Tsftv       As String
    Dim Twftv_s     As String
    Dim Tlftv_s     As String
    Dim TSftv_s     As String
    Dim s1          As String
    Dim s2          As String
    Dim ls1         As String
    Dim ls2         As String
    Dim Nonglis     As String
    Dim LTerm       As String
    Dim YMD         As String
    Dim days        As String
    Dim LDays       As String
    Dim Lmons       As String
    Dim shuxiangStr As String
    Dim tian        As Integer
    Dim ss          As String
    Dim ss1         As String
    read_data
    '获取当前系统时间
    s1 = GetMonthWeek(curtime)
    LTerm = GetTerm(curtime)
    'curTime = "2004-05-01"
    '星期名
    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)
    YMD = curYear & "" & curMonth & "" & curDay & ""

    If curMonth < 10 Then '月变成双字符
        mons = "0" & curMonth
    Else
        mons = curMonth
    End If

    If curDay < 10 Then '日变成双字符
        days = "0" & curDay
    Else
        days = curDay
    End If

    s2 = mons & days '集合月日/-/MMDD
    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 curDay < 10 Then '农历日变成双字符
        LDays = "0" & curDay
    Else
        LDays = curDay
    End If

    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) & ""
    shuxiangStr = ShuXiang(((curYear - 4) Mod 60) Mod 12)

    '生成农历月、日 ==> NongliDayStr
    If curMonth = 12 Then tian = lMonthDays(curYear)
    If (curMonth < 1) Then
        NongliDayStr = "" & MonName(-1 * curMonth)
    Else
        NongliDayStr = MonName(curMonth)
    End If

    If curMonth < 10 Then '农历月变成双字符
        Lmons = "0" & curMonth
    Else
        Lmons = curMonth
    End If

    ls1 = Lmons & LDays
    NongliDayStr = NongliDayStr & ""
    NongliDayStr = NongliDayStr & DayName(curDay)
    Nonglis = NongliStr & NongliDayStr 'xu chu

    For i = 1 To 11 '找以周计算的节日
        Twftv = Mid(wFtv(i), 1, 4)

        If Twftv = s1 Then
            Twftv_s = Mid(wFtv(i), 5, 3)
            Exit For
        End If

    Next i

    For i = 1 To 25 '找以公历的节日
        Tsftv = Mid(sFtv(i), 1, 4)

        If Tsftv = s2 Then
            TSftv_s = Mid(sFtv(i), 5, 6)
            Exit For
        End If

    Next i

    For i = 1 To 11 '找农历的节日
        TLftv = Mid(lFtv(i), 1, 4)

        If TLftv = ls1 Then
            Tlftv_s = Mid(lFtv(i), 5, 3)
            Exit For
        End If

    Next i

    If ls1 = "12" & tian Then Tlftv_s = Mid(lFtv(11), 5, 3)

    ss = "今天是" & YMD & Chr(13) & "农历:" & Nonglis & Chr(13) & "属象:" & shuxiangStr & "" & Chr(13)
    ss1 = ""

    If Tlftv_s <> "" Then ss1 = ss1 & Tlftv_s
    If Twftv_s <> "" Then ss1 = ss1 & Twftv_s
    If TSftv_s <> "" Then ss1 = ss1 & TSftv_s
    If LTerm <> "" Then ss1 = ss1 & LTerm
    If ss1 <> " " Then ss = ss & "今天是:" & ss1
    Label1.Caption = ss
End Sub

Private Sub Check1_Click()

    If Check1.Value = 1 Then
        Combo1.Enabled = True
        Combo2.Enabled = True
        Combo3.Enabled = True
    Else
        Check1.Value = 0
        Combo1.Enabled = False
        Combo2.Enabled = False
        Combo3.Enabled = False
    End If

End Sub

Private Sub Combo2_LostFocus()
    Combo3.Clear
    Dim i As Integer
    Dim d As Integer

    Select Case CInt(Combo2.Text)

        Case 1, 3, 5, 7, 8, 10, 12

            For i = 1 To 31
                Combo3.AddItem i, i - 1
            Next i

        Case 4, 6, 9, 11

            For i = 1 To 30
                Combo3.AddItem i, i - 1
            Next i

        Case 2

            If Combo1.Text Mod 4 = 0 Then
                d = 29
            Else
                d = 28
            End If

            For i = 1 To d
                Combo3.AddItem i, i - 1
            Next i

    End Select

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
settime = Combo1.Text & "-" & Combo2.Text & "-" & Combo3.Text
riliLoad (settime)
End Sub

Private Sub Form_Load()

    Check1.Value = 0
    Combo1.Enabled = False
    Combo2.Enabled = False
    Combo3.Enabled = False

    Combo1.Text = Year(Date)
    Combo2.Text = Month(Date)
    Combo3.Text = Day(Date)
    riliLoad (Date)
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    settime = Combo1.Text & "-" & Combo2.Text & "-" & Combo3.Text
    riliLoad (settime)
End Sub

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Windows API Reference for C#, VB.NET
    不错的.net 下用API的参考站点地址在:http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp 下面摘抄分类,便于大家直接就拿来用: File, Memory, Process, Threading, Time, Console, and Comm control(kernel32.dll) _hread_hwrite_lclose_lcr
    03-16
  • 一个基于API的VB.net串口通讯类 vbnet串口通信
    VB.net的串口通讯支持总是让人觉得有所不足,在使用VB6的MsComm32.ocx时,很多人都会在VB.net的开发中觉得很困扰。    这里讲述的VB.net串口通讯类使用native代码,并且它是通API调用实现的,你会发现VB.net的串口通讯就是这么简单。    在说明如何使
    02-12
  • [VB][ASP.NET]FileUpload控件「批次上传 / 多档
    FileUpload控件「批次上传 / 多档案同时上传」的范例 (VB语法) http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/14/3986.aspx    FileUpload控件真的简单好用,不使用它来作批次上传,却要改用别的方法,实在不聪明。要用就一次用到底,公开File
    02-10
  • 第八章 VB中ActiveX控件的使用
    轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第八章          VB中ActiveX控件的使用8.1  概述     这里的ActiveX控件是指VB标准工具箱里没有的控件,用时需从“工程”菜单里选择“部件…”(或右键单击工具箱,从快捷菜单中选择“部
    02-10
  • 第二章 VB的界面设计
    轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第二章         VB的界面设计2.1  VB用户界面设计基础1. 概述   界面的设计有两步:先绘制控件,然后确定控件属性。   绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后
    02-10
  • C#/VB.NET 获取Excel中图片所在的行、列坐标位置
    C#/VB.NET 获取Excel中图片所在的行、列坐标位
    本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置。这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列、纵坐标即顶点所在的第几行。下面是获取图片位置的详细方法及步骤。【程序环境】按照如下方法来引
    02-09
  • VB操作XML
    VB操作XML
    XSL(可扩展样式表语言)是对CSS的一种扩展,功能比CSS强大得多。XML链接是在HTML链接的功能之上加以扩展,可以支持更为复杂的链接,通过XML链接,不仅可以在XML文件之间建立链接,还可以建立其他类型数据之间的链接,其规范分为三个部分:XLink语言,XPointe
    02-09
  • VB6多线程,关键段操作 vb6.0 多线程
    Option Explicit Declare Function GetLastError Lib "kernel32" () As Long 'Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 'Declare Sub ExitThread Lib "kernel32" (Optional ByVal dwExitCode
    02-09
  • VB.NET调用IE,并且等待
                Dim p As New Process            '获得URL            aURL = GetURL()            '获得IE路径            p.StartInfo.FileName = System.Environment.GetFolderPath( _ 
    02-09
  • vb的VSFlexGrid控件 vb msflexgrid
    多行选中VSFlexGrid的SelectionMode = flexSelectionListBox,现在可以配合Ctrl进行多行选择循环取值用vsflexgrid.SelectedRows 可以得到你选择的行的总数量然后用循环可以得到具体的行中具体列的内容Dim Temp  As StringDim i As IntegerFor i =
    02-09
点击排行