Discuz教程网

农历的算法-vb教程

[复制链接]
authicon 天涯地方 发表于 2011-1-5 17:16:34 | 显示全部楼层 |阅读模式
  1. Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
  2. Dim curTime, curYear, curMonth, curDay, curWeekday
  3. Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
  4. Dim i, m, n, k, isEnd, bit, TheDate
  5. Private Sub Form_Load()
  6. ´获取当前系统时间
  7. curTime = Now()
  8. ´星期名
  9. WeekName(0) = " * "
  10. WeekName(1) = "星期日"
  11. WeekName(2) = "星期一"
  12. WeekName(3) = "星期二"
  13. WeekName(4) = "星期三"
  14. WeekName(5) = "星期四"
  15. WeekName(6) = "星期五"
  16. WeekName(7) = "星期六"
  17. ´天干名称
  18. TianGan(0) = "甲"
  19. TianGan(1) = "乙"
  20. TianGan(2) = "丙"
  21. TianGan(3) = "丁"
  22. TianGan(4) = "戊"
  23. TianGan(5) = "己"
  24. TianGan(6) = "庚"
  25. TianGan(7) = "辛"
  26. TianGan(8) = "壬"
  27. TianGan(9) = "癸"
  28. ´地支名称
  29. DiZhi(0) = "子"
  30. DiZhi(1) = "丑"
  31. DiZhi(2) = "寅"
  32. DiZhi(3) = "卯"
  33. DiZhi(4) = "辰"
  34. DiZhi(5) = "巳"
  35. DiZhi(6) = "午"
  36. DiZhi(7) = "未"
  37. DiZhi(8) = "申"
  38. DiZhi(9) = "酉"
  39. DiZhi(10) = "戌"
  40. DiZhi(11) = "亥"
  41. ´属相名称
  42. ShuXiang(0) = "鼠"
  43. ShuXiang(1) = "牛"
  44. ShuXiang(2) = "虎"
  45. ShuXiang(3) = "兔"
  46. ShuXiang(4) = "龙"
  47. ShuXiang(5) = "蛇"
  48. ShuXiang(6) = "马"
  49. ShuXiang(7) = "羊"
  50. ShuXiang(8) = "猴"
  51. ShuXiang(9) = "鸡"
  52. ShuXiang(10) = "狗"
  53. ShuXiang(11) = "猪"
  54. ´农历日期名
  55. DayName(0) = "*"
  56. DayName(1) = "初一"
  57. DayName(2) = "初二"
  58. DayName(3) = "初三"
  59. DayName(4) = "初四"
  60. DayName(5) = "初五"
  61. DayName(6) = "初六"
  62. DayName(7) = "初七"
  63. DayName(8) = "初八"
  64. DayName(9) = "初九"
  65. DayName(10) = "初十"
  66. DayName(11) = "十?quot;"
  67. DayName(12) = "十二"
  68. DayName(13) = "十三"
  69. DayName(14) = "十四"
  70. DayName(15) = "十五"
  71. DayName(16) = "十六"
  72. DayName(17) = "十七"
  73. DayName(18) = "十八"
  74. DayName(19) = "十九"
  75. DayName(20) = "二十"
  76. DayName(21) = "廿一"
  77. DayName(22) = "廿二"
  78. DayName(23) = "廿三"
  79. DayName(24) = "廿四"
  80. DayName(25) = "廿五"
  81. DayName(26) = "廿六"
  82. DayName(27) = "廿七"
  83. DayName(28) = "廿八"
  84. DayName(29) = "廿九"
  85. DayName(30) = "三十"
  86. ´农历月份名
  87. MonName(0) = "*"
  88. MonName(1) = "正"
  89. MonName(2) = "二"
  90. MonName(3) = "三"
  91. MonName(4) = "四"
  92. MonName(5) = "五"
  93. MonName(6) = "六"
  94. MonName(7) = "七"
  95. MonName(8) = "八"
  96. MonName(9) = "九"
  97. MonName(10) = "十"
  98. MonName(11) = "十一"
  99. MonName(12) = "腊"
  100. ´公历每月前面的天数
  101. MonthAdd(0) = 0
  102. MonthAdd(1) = 31
  103. MonthAdd(2) = 59
  104. MonthAdd(3) = 90
  105. MonthAdd(4) = 120
  106. MonthAdd(5) = 151
  107. MonthAdd(6) = 181
  108. MonthAdd(7) = 212
  109. MonthAdd(8) = 243
  110. MonthAdd(9) = 273
  111. MonthAdd(10) = 304
  112. MonthAdd(11) = 334
  113. ´农历数据
  114. NongliData(0) = 2635
  115. NongliData(1) = 333387
  116. NongliData(2) = 1701
  117. NongliData(3) = 1748
  118. NongliData(4) = 267701
  119. NongliData(5) = 694
  120. NongliData(6) = 2391
  121. NongliData(7) = 133423
  122. NongliData(8) = 1175
  123. NongliData(9) = 396438
  124. NongliData(10) = 3402
  125. NongliData(11) = 3749
  126. NongliData(12) = 331177
  127. NongliData(13) = 1453
  128. NongliData(14) = 694
  129. NongliData(15) = 201326
  130. NongliData(16) = 2350
  131. NongliData(17) = 465197
  132. NongliData(18) = 3221
  133. NongliData(19) = 3402
  134. NongliData(20) = 400202
  135. NongliData(21) = 2901
  136. NongliData(22) = 1386
  137. NongliData(23) = 267611
  138. NongliData(24) = 605
  139. NongliData(25) = 2349
  140. NongliData(26) = 137515
  141. NongliData(27) = 2709
  142. NongliData(28) = 464533
  143. NongliData(29) = 1738
  144. NongliData(30) = 2901
  145. NongliData(31) = 330421
  146. NongliData(32) = 1242
  147. NongliData(33) = 2651
  148. NongliData(34) = 199255
  149. NongliData(35) = 1323
  150. NongliData(36) = 529706
  151. NongliData(37) = 3733
  152. NongliData(38) = 1706
  153. NongliData(39) = 398762
  154. NongliData(40) = 2741
  155. NongliData(41) = 1206
  156. NongliData(42) = 267438
  157. NongliData(43) = 2647
  158. NongliData(44) = 1318
  159. NongliData(45) = 204070
  160. NongliData(46) = 3477
  161. NongliData(47) = 461653
  162. NongliData(48) = 1386
  163. NongliData(49) = 2413
  164. NongliData(50) = 330077
  165. NongliData(51) = 1197
  166. NongliData(52) = 2637
  167. NongliData(53) = 268877
  168. NongliData(54) = 3365
  169. NongliData(55) = 531109
  170. NongliData(56) = 2900
  171. NongliData(57) = 2922
  172. NongliData(58) = 398042
  173. NongliData(59) = 2395
  174. NongliData(60) = 1179
  175. NongliData(61) = 267415
  176. NongliData(62) = 2635
  177. NongliData(63) = 661067
  178. NongliData(64) = 1701
  179. NongliData(65) = 1748
  180. NongliData(66) = 398772
  181. NongliData(67) = 2742
  182. NongliData(68) = 2391
  183. NongliData(69) = 330031
  184. NongliData(70) = 1175
  185. NongliData(71) = 1611
  186. NongliData(72) = 200010
  187. NongliData(73) = 3749
  188. NongliData(74) = 527717
  189. NongliData(75) = 1452
  190. NongliData(76) = 2742
  191. NongliData(77) = 332397
  192. NongliData(78) = 2350
  193. NongliData(79) = 3222
  194. NongliData(80) = 268949
  195. NongliData(81) = 3402
  196. NongliData(82) = 3493
  197. NongliData(83) = 133973
  198. NongliData(84) = 1386
  199. NongliData(85) = 464219
  200. NongliData(86) = 605
  201. NongliData(87) = 2349
  202. NongliData(88) = 334123
  203. NongliData(89) = 2709
  204. NongliData(90) = 2890
  205. NongliData(91) = 267946
  206. NongliData(92) = 2773
  207. NongliData(93) = 592565
  208. NongliData(94) = 1210
  209. NongliData(95) = 2651
  210. NongliData(96) = 395863
  211. NongliData(97) = 1323
  212. NongliData(98) = 2707
  213. NongliData(99) = 265877
  214. ´生成当前公历年、月、日 ==> GongliStr
  215. curYear = Year(curTime)
  216. curMonth = Month(curTime)
  217. curDay = Day(curTime)
  218. GongliStr = curYear & "年"
  219. If (curMonth < 10) Then
  220.     GongliStr = GongliStr & "0" & curMonth & "月"
  221. Else
  222.     GongliStr = GongliStr & curMonth & "月"
  223. End If
  224. If (curDay < 10) Then
  225.     GongliStr = GongliStr & "0" & curDay & "日"
  226. Else
  227.     GongliStr = GongliStr & curDay & "日"
  228. End If
  229. &acute;生成当前公历星期 ==> WeekdayStr
  230. curWeekday = Weekday(curTime)
  231. WeekdayStr = WeekName(curWeekday)
  232. &acute;计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
  233. TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
  234. If ((curYear Mod 4) = 0 And curMonth > 2) Then
  235.     TheDate = TheDate + 1
  236. End If
  237. &acute;计算农历天干、地支、月、日
  238. isEnd = 0
  239. m = 0
  240. Do
  241.     If (NongliData(m) < 4095) Then
  242.         k = 11
  243.     Else
  244.         k = 12
  245.     End If
  246.     n = k
  247.     Do
  248.         If (n < 0) Then
  249.             Exit Do
  250.         End If
  251.     &acute;获取NongliData(m)的第n个二进制位的值
  252.     bit = NongliData(m)
  253.     For i = 1 To n Step 1
  254.         bit = Int(bit / 2)
  255.     Next
  256.     bit = bit Mod 2
  257.     If (TheDate <= 29 + bit) Then
  258.         isEnd = 1
  259.         Exit Do
  260.     End If
  261.     TheDate = TheDate - 29 - bit
  262.     n = n - 1
  263.   Loop
  264.   If (isEnd = 1) Then
  265.       Exit Do
  266.   End If
  267.   m = m + 1
  268. Loop
  269. curYear = 1921 + m
  270. curMonth = k - n + 1
  271. curDay = TheDate
  272. If (k = 12) Then
  273.     If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
  274.         curMonth = 1 - curMonth
  275.     ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then
  276.         curMonth = curMonth - 1
  277.     End If
  278. End If
  279. &acute;生成农历天干、地支、属相 ==> NongliStr
  280. NongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"
  281. NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"
  282. &acute;生成农历月、日 ==> NongliDayStr
  283. If (curMonth < 1) Then
  284.     NongliDayStr = "闰" & MonName(-1 * curMonth)
  285. Else
  286.     NongliDayStr = MonName(curMonth)
  287. End If
  288. NongliDayStr = NongliDayStr & "月"
  289. NongliDayStr = NongliDayStr & DayName(curDay)
  290. MsgBox NongliStr & NongliDayStr
  291. End Sub
复制代码




上一篇:舍弃浮躁, 28条重要的vb语言学习建议 (新改编)
下一篇:VB编写的RPG游戏完整源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-8-3 09:22

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表