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 , 基础类