美文网首页
python 阳历转阴历代码(2)

python 阳历转阴历代码(2)

作者: faraway_com | 来源:发表于2017-06-13 15:10 被阅读0次

    main.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #给出阳历日期转换成阴历日期
    import math
    from daysbetween import my_distance_DAY
    def GetDayOf(st):
        #–天干名称
        cTianGan = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
        #–地支名称
        cDiZhi = ["子","丑","寅","卯","辰","巳","午", "未","申","酉","戌","亥"]
        #–属相名称
        cShuXiang = ["鼠","牛","虎","兔","龙","蛇", "马","羊","猴","鸡","狗","猪"]
        #–农历日期名
        cDayName =[
            "*","初一","初二","初三","初四","初五",
            "初六","初七","初八","初九","初十",
            "十一","十二","十三","十四","十五",
            "十六","十七","十八","十九","二十",
            "廿一","廿二","廿三","廿四","廿五",
            "廿六","廿七","廿八","廿九","三十"
        ]
        #–农历月份名
        cMonName = ["*","正","二","三","四","五","六", "七","八","九","十","冬","腊"]
        #–公历每月前面的天数
        wMonthAdd = [0,31,59,90,120,151,181,212,243,273,304,334]
        #– 农历数据
        wNongliData = [2635,333387,1701,1748,267701,694,2391,133423,1175,396438
        ,3402,3749,331177,1453,694,201326,2350,465197,3221,3402
        ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738
        ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
        ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
        ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
        ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
        ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
        ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709
        ,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877]
    
        #—取当前公历年、月、日—
        wCurYear = st["year"]
        wCurMonth = st["mon"]
        wCurDay = st["day"]
        #—计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)—
        nTheDate = (wCurYear - 1921) * 365 + (wCurYear - 1921)/4 + wCurDay + wMonthAdd[wCurMonth-1] - 38
        if (((wCurYear % 4) == 0) and (wCurMonth > 2)):
            nTheDate = nTheDate + 1
    
        #–计算农历天干、地支、月、日—
        nIsEnd = 0
        m = 0
        while nIsEnd != 1:
            #if wNongliData[m+1] < 4095:
            if wNongliData[m] < 4095:
                k = 11
            else:
                k = 12
            n = k
            while n>=0:
                nBit = wNongliData[m]
                for i in range(n):
                    nBit = math.floor(nBit/2);
    
                nBit = nBit % 2
    
                if nTheDate <= (29 + nBit):
                    nIsEnd = 1
                    break
    
                nTheDate = nTheDate - 29 - nBit
                n = n - 1
    
            if nIsEnd != 0:
                break
            m = m + 1
    
        wCurYear = 1921 + m
        wCurMonth = k - n + 1
        wCurDay = int(math.floor(nTheDate))
        if k == 12:
            if wCurMonth == wNongliData[m] / 65536 + 1:
                wCurMonth = 1 - wCurMonth
            elif wCurMonth > wNongliData[m] / 65536 + 1:
                wCurMonth = wCurMonth - 1
    
        #print '阳历', st["year"], st["mon"], st["day"]
        #用数字形式显示农历:
        #print '农历', wCurYear, wCurMonth, wCurDay
        #–生成农历天干、地支、属相 ==> wNongli–
        szShuXiang = cShuXiang[((wCurYear - 4) % 60) % 12]
        zNongli = szShuXiang + '(' + cTianGan[(((wCurYear - 4) % 60) % 10)] + cDiZhi[(((wCurYear - 4) % 60) % 12)] + ')年'
        #print "农历%s(%s%s)年%s"%(szShuXiang,cTianGan[((wCurYear - 4) % 60) % 10],cDiZhi[((wCurYear - 4) % 60) % 12],szNongliDay)
    
        #–生成农历月、日 ==> wNongliDay–*/
        if wCurMonth < 1:
            szNongliDay =  "闰" + cMonName[(-1 * wCurMonth)]
        else:
            szNongliDay = cMonName[wCurMonth]
    
        szNongliDay =  szNongliDay + "月" + cDayName[wCurDay]
        #print "农历%s(%s%s)年%s"%(szShuXiang,cTianGan[((wCurYear - 4) % 60) % 10],cDiZhi[((wCurYear - 4) % 60) % 12],szNongliDay)
        #print '农历',szNongliDay
        #return szNongli .. szNongliDay
        return szNongliDay
    
    #阳历转阴历  2017/10/9
    def chg_yinli(day_yangli="1988/12/19"):
        st = {"year": 2017, "mon": 10, "day": 9}
        #print str(day_yangli).split('/')[0]
        st['year']=int(str(day_yangli).split('/')[0])
        #print st['year']
        st['mon']=int(str(day_yangli).split('/')[1])
        st['day']=int(str(day_yangli).split('/')[2])
        #print st
        day_yinli=GetDayOf(st)
        return day_yinli
    

    相关文章

      网友评论

          本文标题:python 阳历转阴历代码(2)

          本文链接:https://www.haomeiwen.com/subject/ycidqxtx.html