python显示农历日期

Python017

python显示农历日期,第1张

需安装sxtwl包,命令如下

pip install sxtwl

农历(Lunar calendar)<->阳历(solar calendar)转换

代码如下(基于python3):

import sxtwl

#日历中文索引

ymc = [u"十一", u"十二", u"正", u"二", u"三", u"四", u"五", u"六", u"七", u"八", u"九", u"十" ]

rmc = [u"初一", u"初二", u"初三", u"初四", u"初五", u"初六", u"初七", u"初八", u"初九", u"初十", \

u"十一", u"十二", u"十三", u"十四", u"十五", u"十六", u"十七", u"十八", u"十九", \

u"二十", u"廿一", u"廿二", u"廿三", u"廿四", u"廿五", u"廿六", u"廿七", u"廿八", u"廿九", u"三十", u"卅一"]

# 日历库实例化

lunar = sxtwl.Lunar()

# 1.阴历转阳历

solar_day = lunar.getDayByLunar(2019,7,27)

print("公历(阳历):{0}年{1}月{2}日".format(solar_day.y, solar_day.m, solar_day.d))

# 2.阳历转阴历

from datetime import date

today = str(date.today()) # 如 2019-08-08

today_list = today.split('-') # ['2019', '08', '08']

lunar_day = lunar.getDayBySolar((int)(today_list[0]),(int)(today_list[1]),(int)(today_list[2])) # 输入年月日

# 判断是否为润年

if(lunar_day.Lleap):

print("阴历(农历):{0}月{1}".format(ymc[lunar_day.Lmc], rmc[lunar_day.Ldi]))

else:

print("阴历(农历):{0}月{1}".format(ymc[lunar_day.Lmc], rmc[lunar_day.Ldi]))

结果为

'''

公历(阳历):2019年8月27日

阴历(农历):七月初八

'''

貌似没有现成的......从别的地方找一个能实现你说的功能的代码,你可以看看:

#encoding:utf8

def w_day(y,m,d):#已知日期求星期

    c=y//100

    y=int(str(y)[-2:])

    w=(y+(y//4)+(c//4)-2*c+(26*(m+1)//10)+d-1)%7 ##蔡勒公式只适合于1582年10月15日之后

    return w

def ml(y,m,d=1):#当月有几天

    ly=(y%400==0) or (y%4==0 and y%100!=0) and 1 or 0 #闰年=1,平年=0

    return (m in (4,6,9,11) and 30 or (m==2 and 28+ly or 31))

    

def cal(y,m,d): #输出日历

    wf=w_day(y,m=1,d=1) #该月的第一天是星期几

    mc=[(d==x and ("["+str(x).rjust(2)+"]").center(5) or str(x).rjust(2).center(5)) for x in  range(1,ml(y,m)+1)]

    mc[:0]=[" "*5]*wf

    mc=[(i+1)%7 and j or j+"\n" for i,j in enumerate(mc)]

    td=("%s年%s月%s日  星期%s\n" %(y,m,d,("一","二","三","四","五","六","日")[w_day(y,m,d)-1])).center(35)

    x="\n Sun  Mon  Tue  Wed  Thu  Fri  Sat\n"

    return td+x+"".join(mc)

    

##################################################################

##################################################################

if __name__ == '__main__':

    import datetime

    T=datetime.date.today()

    print("今天是:\n"+cal(T.year,T.month,T.day))

@[toc]

Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:

返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

calendar.isleap(year)

是闰年返回 True,否则为 false。

返回在Y1,Y2两年之间的闰年总数。

返回两个整数。第一个是该月的星期几,第二个是该月有几天。星期几是从0(星期一)到 6(星期日)。