美文网首页
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)

    main.py

  • python 阳历转阴历代码(1)

    daysbetween.py

  • 2017-12-25 阳历转阴历、c# .net 中<% =

    第一组:陈辉 阳历转阴历的方法 最近用到了阳历转阴历的方法,当然是js; 网上的是通用的js方法代码如下,我竟然...

  • 阳历 -- > 阴历

    - (NSString *)getChineseCalendarWithDate:(NSInteger)day m...

  • 阴历阳历

    理论学习大会安排在六楼,要求全员必须参加,学习理论知识和文件。书记在台上热火朝天的讲,台下员工三两成群的讲着话,也...

  • 阳历,阴历

    女儿他们本打算上周五晚上回他们小家,又因周六晚上女婿得值班,于是改成周日下午回去,正好奶奶村里也解封了,他们来带几...

  • 阳历转换成阴历的源代码(C和Objective-C)

    爱直至成伤lie 阳历转换成阴历的源代码(C和Objective-C) 转自:http://www.7880.co...

  • 《阴历与阳历》

    在中国现代日历上 阴历总在追赶着阳历 就像农村总在城市后 小孩总在大人后 冬天总在春天后 日夜不息,气喘咻咻 累了...

  • 阳历与阴历

    阳历是以地球围着太阳转一圈所经历的时间为一年,一年为365天分为12个月,俗称太阳历。 阴历则是以月...

  • 阴历和阳历

    我记得阳历的2021年新年,1月1日,不开心,回地大吃饭把塑料板凳坐坏,摔了一跤。最喜欢的裤子被戳破了一个...

网友评论

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

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