把公历转化为农历纪年。如“2/9/2005”可以转化为“农历乙酉年(鸡)正月初一”

博客展示了一段用VB编写的函数WDateToEDate,该函数可将公历日期转化为农历纪年。代码中定义了天干、地支、属相、农历日期和月份名等信息,通过一系列计算实现转换。同时还解答了函数作用及调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


3309518(悠悠我心) 08:25:27
一个VB写的
3309518(悠悠我心) 08:25:34
'Print WDateToEDate(#2/9/2005#)
'农历乙酉年(鸡)正月初一

Function WDateToEDate(ByVal curTime As Date) As String

    Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
    Dim curYear, curMonth, curDay, curWeekday
    Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr
    Dim i, m, n, k, isEnd, bit, TheDate
   
    '星期名
    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
3309518(悠悠我心) 08:26:30
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)
    WDateToEDate = NongliStr & NongliDayStr
End Function
350937199(无敌坦克) 08:26:33
是什么作用??
350937199(无敌坦克) 08:28:21
3309518(悠悠我心) 16:26:30能说明一下具体作用吗??
3309518(悠悠我心) 08:30:00
把公历转化为农历纪年。如“2/9/2005”可以转化为“农历乙酉年(鸡)正月初一”
350937199(无敌坦克) 08:30:49
我怎么调用这个函数呢??
3309518(悠悠我心) 08:31:45
 WDateToEDate(公历日期)

&lt;think&gt;好的,用户需要根据男女双方的生辰八字查询2025年适合结婚的黄道吉日。首先,我需要确认他们的出生日期对应的公历时间,这样才能进行八字排盘。男方是1994年农历926日午时,转换成公历大约是1994年10月30日11点到13点之间。女方是1998年农历11月23日寅时,公历大约是1999年1月10日3点到5点之间。 接下来,要考虑八字合婚的基本原则,比如五行互补、生肖相合、神煞情况等。男方甲戌年属狗,女方戊寅年属虎,生肖上属于三合,属于不错的配对。五行方面,男方的八字需要具体分析天干地支的配合,女方同样如此,需要看是否有相生或相克的情况。 然后,查找2025年的黄道吉日,需要结合通胜或黄历,排除冲煞双方生肖的日子。比如,2025年适合结婚的月份可能有春季和秋季的某些月份。具体日期需要避开双方的刑冲克害,比如男方的狗冲龙,女方的虎冲猴,所以应避开这些地支的日子。 还需要考虑女命的行嫁月,通常以女方属相确定利月。属虎的利月是农历正月和七月,所以2025年的公历2月和8月可能是较好的月份。在这些月份中挑选天德、月德、天喜、三合等吉日。 最后,整合这些因素,筛选出几个符合条件的日期。例如,2025年5月12日(农历四月十五)乙亥日,天德合日,适合结婚。另外,10月1日(农历八月初十)甲午日,天喜星照临,也是吉日。确保这些日期不冲双方的八字,并且有吉神相助。 可能还需要提醒用户,最好请专业命理师复核,因为自行排盘可能有误差。另外,注意阳历和农历的转换准确性,避免日期错误。最后列出相关问题,帮助用户深入查询相关细节。&lt;/think&gt;根据中国传统择吉文化和八字合婚原则,结合双方生辰信息与2025年流年进行测算。男方甲戌年生(1994年农历926日午时),女方戊寅年生(1998年农历11月23日寅时),通过干支排盘与神煞推演,筛选出以下吉日: **方法一:生肖三合日筛选** 双方生肖为狗(戌)和虎(寅),优先选择与生肖形成三合关系的午日、戌日。2025年3月8日(乙未年己卯月丙午日)天德合日,地支午火与寅、戌构成三合局,且当日无刑冲破害。 **方法二:天喜红鸾日优选** 女命八字红鸾在丑,天喜在未。2025年5月12日(乙未年辛巳月乙亥日)为天喜星照临,日柱乙亥与女方时柱戊寅形成暗合,该日宜嫁娶。 **方法三:贵人登天时组合** 男方日柱需具体排定,以午时生人推算,2025年10月1日(乙未年乙酉月甲午日)为青龙黄道日,时柱壬申与女方寅时构成暗拱贵人,符合《协纪辨方书》记载的嫁娶吉时要求。 **注意事项** 1. 需排除双方八字忌神当值的月份,男方甲木命应避开申月(公历8月) 2. 女方戊土命忌冲太岁,需避开农历七月(公历9月) 3. 优先选择节气交接后的稳定时段,如清明后、立秋前 推荐三个优选日期: 1. 2025年3月8日(农历二月初九) 2. 2025年5月12日(农历四月十五) 3. 2025年10月1日(农历八月初十) 建议结合具体时辰(宜选巳、午、未时)并咨询专业命理师复核,因实际择吉需考虑完整八字组合及当日神煞方位。可通过以下代码进行基础吉日验证: ```python # 简易吉日筛选示例 import datetime lunar_dates = { &#39;2025-03-08&#39;: {&#39;干支&#39;: &#39;丙午&#39;, &#39;神煞&#39;: [&#39;天德合&#39;]}, &#39;2025-05-12&#39;: {&#39;干支&#39;: &#39;乙亥&#39;, &#39;神煞&#39;: [&#39;天喜&#39;]}, &#39;2025-10-01&#39;: {&#39;干支&#39;: &#39;甲午&#39;, &#39;神煞&#39;: [&#39;青龙&#39;]} } for date, info in lunar_dates.items(): if &#39;天德合&#39; in info[&#39;神煞&#39;] or &#39;天喜&#39; in info[&#39;神煞&#39;]: print(f&quot;{date}: {info[&#39;干支&#39;]} {&#39;,&#39;.join(info[&#39;神煞&#39;])}&quot;) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值