当前位置:编程学习 > VB >>

vb中阴历阳历转换问题

各位兄弟有没有写过此函数的啊?如果有的话,给小弟看看,我正需要这种函数,但是不知道公式和算法不会写,谢谢各位了啊。 --------------------编程问答-------------------- 陽歷日期轉農歷日期

Option Explicit
Dim TianGan        As String
Dim DiZhi          As String
Dim ShuXiang       As String
Dim TianGanx       As String
Dim DiZhix         As String
Dim ShuXiangx      As String
Dim NongliData(99) As Double
Dim CurTime        As Date
Dim curYear, curMonth, curDay
Dim I, M, N, K, isEnd, Bit, TheDate
Private Sub Form_Load()
  CurTime = Now()
  TianGanx = "甲乙丙丁戊已庚辛壬癸"
  DiZhix = "子丑寅卯辰已午未申酉戊亥"
  ShuXiangx = "鼠牛虎免龍蛇馬羊猴雞狗豬"
 
  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
  
  curYear = Year(CurTime)
  curMonth = Month(CurTime)
  curDay = Day(CurTime)
 
  TheDate = DateDiff("d", "1921/2/8", Date) + 1
 
  isEnd = 0: M = 0
  Do
    If NongliData(M) < 4095 Then K = 11 Else K = 12
    N = K
    Do While N >= 0
       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
    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
 
  '獲得NongLi值
  TianGan = Mid(TianGanx, (((curYear - 4) Mod 60) Mod 10) + 1, 1)
  DiZhi = Mid(DiZhix, (((curYear - 4) Mod 60) Mod 12) + 1, 1)
  ShuXiang = Mid(ShuXiangx, (((curYear - 4) Mod 60) Mod 12) + 1, 1)

  If curMonth < 1 Then curMonth = curMonth * -1
  Application.StatusBar = "農歷:" & curMonth & "月" & curDay
End Sub
--------------------编程问答-------------------- 学习…… --------------------编程问答-------------------- 够长啊,学习 --------------------编程问答-------------------- 很好,谢谢一楼的, --------------------编程问答--------------------
引用 1 楼 zsj1101 的回复:
陽歷日期轉農歷日期

Option   Explicit
Dim   TianGan                 As   String
Dim   DiZhi                     As   String
Dim   ShuXiang               As   String
Dim   TianGanx               As   String
Dim   DiZhix                   As   String
Dim   ShuXiangx             As   String
Dim   NongliData(99)   As   Double
Dim   CurTime                 As   Date
Dim   curYear,   curMonth,   curDay
Dim   I,   M,   N,   K,   isEnd,   Bit,   TheDate
Private   Sub   Form_Load()
    CurTime   =   Now()
    TianGanx   =   "甲乙丙丁戊已庚辛壬癸 "
    DiZhix   =   "子丑寅卯辰已午未申酉戊亥 "
    ShuXiangx   =   "鼠牛虎免龍蛇馬羊猴雞狗豬 "
 
    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
   
    curYear   =   Year(CurTime)
    curMonth   =   Month(CurTime)
    curDay   =   Day(CurTime)
 
    TheDate   =   DateDiff( "d ",   "1921/2/8 ",   Date)   +   1
 
    isEnd   =   0:   M   =   0
    Do
        If   NongliData(M)   <   4095   Then   K   =   11   Else   K   =   12
        N   =   K
        Do   While   N   > =   0
              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
        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
 
    '獲得NongLi值
    TianGan   =   Mid(TianGanx,   (((curYear   -   4)   Mod   60)   Mod   10)   +   1,   1)
    DiZhi   =   Mid(DiZhix,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)
    ShuXiang   =   Mid(ShuXiangx,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)

    If   curMonth   <   1   Then   curMonth   =   curMonth   *   -1
    Application.StatusBar   =   "農歷: "   &   curMonth   &   "月 "   &   curDay
End   Sub


研究一下,能否讲解一下思路?? --------------------编程问答--------------------
引用 1 楼 zsj1101 的回复:
陽歷日期轉農歷日期

Option   Explicit
Dim   TianGan                 As   String
Dim   DiZhi                     As   String
Dim   ShuXiang               As   String
Dim   TianGanx               As   String
Dim   DiZhix                   As   String
Dim   ShuXiangx             As   String
Dim   NongliData(99)   As   Double
Dim   CurTime                 As   Date
Dim   curYear,   curMonth,   curDay
Dim   I,   M,   N,   K,   isEnd,   Bit,   TheDate
Private   Sub   Form_Load()
    CurTime   =   Now()
    TianGanx   =   "甲乙丙丁戊已庚辛壬癸 "
    DiZhix   =   "子丑寅卯辰已午未申酉戊亥 "
    ShuXiangx   =   "鼠牛虎免龍蛇馬羊猴雞狗豬 "
 
    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
   
    curYear   =   Year(CurTime)
    curMonth   =   Month(CurTime)
    curDay   =   Day(CurTime)
 
    TheDate   =   DateDiff( "d ",   "1921/2/8 ",   Date)   +   1
 
    isEnd   =   0:   M   =   0
    Do
        If   NongliData(M)   <   4095   Then   K   =   11   Else   K   =   12
        N   =   K
        Do   While   N   > =   0
              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
        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
 
    '獲得NongLi值
    TianGan   =   Mid(TianGanx,   (((curYear   -   4)   Mod   60)   Mod   10)   +   1,   1)
    DiZhi   =   Mid(DiZhix,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)
    ShuXiang   =   Mid(ShuXiangx,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)

    If   curMonth   <   1   Then   curMonth   =   curMonth   *   -1
    Application.StatusBar   =   "農歷: "   &   curMonth   &   "月 "   &   curDay
End   Sub


研究一下,能否讲解一下思路?? --------------------编程问答--------------------
引用 1 楼 zsj1101 的回复:
陽歷日期轉農歷日期

Option   Explicit
Dim   TianGan                 As   String
Dim   DiZhi                     As   String
Dim   ShuXiang               As   String
Dim   TianGanx               As   String
Dim   DiZhix                   As   String
Dim   ShuXiangx             As   String
Dim   NongliData(99)   As   Double
Dim   CurTime                 As   Date
Dim   curYear,   curMonth,   curDay
Dim   I,   M,   N,   K,   isEnd,   Bit,   TheDate
Private   Sub   Form_Load()
    CurTime   =   Now()
    TianGanx   =   "甲乙丙丁戊已庚辛壬癸 "
    DiZhix   =   "子丑寅卯辰已午未申酉戊亥 "
    ShuXiangx   =   "鼠牛虎免龍蛇馬羊猴雞狗豬 "
 
    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
   
    curYear   =   Year(CurTime)
    curMonth   =   Month(CurTime)
    curDay   =   Day(CurTime)
 
    TheDate   =   DateDiff( "d ",   "1921/2/8 ",   Date)   +   1
 
    isEnd   =   0:   M   =   0
    Do
        If   NongliData(M)   <   4095   Then   K   =   11   Else   K   =   12
        N   =   K
        Do   While   N   > =   0
              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
        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
 
    '獲得NongLi值
    TianGan   =   Mid(TianGanx,   (((curYear   -   4)   Mod   60)   Mod   10)   +   1,   1)
    DiZhi   =   Mid(DiZhix,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)
    ShuXiang   =   Mid(ShuXiangx,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)

    If   curMonth   <   1   Then   curMonth   =   curMonth   *   -1
    Application.StatusBar   =   "農歷: "   &   curMonth   &   "月 "   &   curDay
End   Sub


研究一下,能否讲解一下思路?? --------------------编程问答-------------------- 没什么了,就是找出每年的时间差,然后计算一下

引用 7 楼 veron_04 的回复:
引用 1 楼 zsj1101 的回复:
陽歷日期轉農歷日期

Option   Explicit
Dim   TianGan                 As   String
Dim   DiZhi                     As   String
Dim   ShuXiang               As   String
Dim   TianGanx               As   String
Dim   DiZhix                   As   String
Dim   ShuXiangx             As   String
Dim   NongliData(99)   As   Double
Dim   CurTime                 As   Date
Dim   curYear,   curMonth,   curDay
Dim   I,   M,   N,   K,   isEnd,   Bit,   TheDate
Private   Sub   Form_Load()
    CurTime   =   Now()
    TianGanx   =   "甲乙丙丁戊已庚辛壬癸 "
    DiZhix   =   "子丑寅卯辰已午未申酉戊亥 "
    ShuXiangx   =   "鼠牛虎免龍蛇馬羊猴雞狗豬 "
 
    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
   
    curYear   =   Year(CurTime)
    curMonth   =   Month(CurTime)
    curDay   =   Day(CurTime)
 
    TheDate   =   DateDiff( "d ",   "1921/2/8 ",   Date)   +   1
 
    isEnd   =   0:   M   =   0
    Do
        If   NongliData(M)   <   4095   Then   K   =   11   Else   K   =   12
        N   =   K
        Do   While   N   > =   0
              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
        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
 
    '獲得NongLi值
    TianGan   =   Mid(TianGanx,   (((curYear   -   4)   Mod   60)   Mod   10)   +   1,   1)
    DiZhi   =   Mid(DiZhix,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)
    ShuXiang   =   Mid(ShuXiangx,   (((curYear   -   4)   Mod   60)   Mod   12)   +   1,   1)

    If   curMonth   <   1   Then   curMonth   =   curMonth   *   -1
    Application.StatusBar   =   "農歷: "   &   curMonth   &   "月 "   &   curDay
End   Sub



研究一下,能否讲解一下思路??
--------------------编程问答-------------------- Private Function NongLi(GDate As Date) As String
'获取当前系统时间
curTime = GDate
'星期名
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) & ")"
'生成农历月、日 ==> NongliDayStr
If (curMonth < 1) Then
    NongliDayStr = "闰" & MonName(-1 * curMonth)
Else
    NongliDayStr = MonName(curMonth)
End If
NongliDayStr = NongliDayStr & "月"
NongliDayStr = NongliDayStr & DayName(curDay)
NongLi = NongliStr & NongliDayStr
End Function
--------------------编程问答-------------------- 使用的时候
me.Caption =NongLi(date) --------------------编程问答--------------------
农历转换,实际上是利用 19 年 7 闰往复循环的规律,建立一个 19 年的表,通过查表来解决。

当然,不必在表中存 19 年的每一天,只需将农历每月的名称和初一对应的阳历列出。

表首必须指明对应的阳历年份。不在 19 年范围的年,只要加减 19 年的倍数即可。
--------------------编程问答-------------------- 有现成的代码,不需要废这脑细胞

引用 11 楼 of123 的回复:
农历转换,实际上是利用 19 年 7 闰往复循环的规律,建立一个 19 年的表,通过查表来解决。

当然,不必在表中存 19 年的每一天,只需将农历每月的名称和初一对应的阳历列出。

表首必须指明对应的阳历年份。不在 19 年范围的年,只要加减 19 年的倍数即可。
--------------------编程问答-------------------- 有现成的代码,不需要废这脑细胞

引用 11 楼 of123 的回复:
农历转换,实际上是利用 19 年 7 闰往复循环的规律,建立一个 19 年的表,通过查表来解决。

当然,不必在表中存 19 年的每一天,只需将农历每月的名称和初一对应的阳历列出。

表首必须指明对应的阳历年份。不在 19 年范围的年,只要加减 19 年的倍数即可。
--------------------编程问答--------------------
呵呵,现成代码也是一样的原理。看看你的代码:

'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一) 

BTW:

“费”脑细胞?还是“废”脑细胞?很可能是后者,如果不是没有的话。哈哈。 --------------------编程问答--------------------
引用 11 楼 of123 的回复:
农历转换,实际上是利用 19 年 7 闰往复循环的规律,建立一个 19 年的表,通过查表来解决。

当然,不必在表中存 19 年的每一天,只需将农历每月的名称和初一对应的阳历列出。

表首必须指明对应的阳历年份。不在 19 年范围的年,只要加减 19 年的倍数即可。


阴历阳历是循环的?
刚才查了一下手机,日期似乎是那么一回事。


但我觉得阴历闰月好象没有规律啊..........
还有节气,好象也有点变化....
--------------------编程问答-------------------- 学习了,Up一下。 --------------------编程问答--------------------
引用 11 楼 of123 的回复:
农历转换,实际上是利用 19 年 7 闰往复循环的规律,建立一个 19 年的表,通过查表来解决。

当然,不必在表中存 19 年的每一天,只需将农历每月的名称和初一对应的阳历列出。

表首必须指明对应的阳历年份。不在 19 年范围的年,只要加减 19 年的倍数即可。


of123怎用個女人頭像?
不知能否提供更詳細一點的關於陰陽歷的規律?
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,