PyPI 上有个 sxtwl ,可以进行农历和公历的转换,还能返回星期、生肖和天干地支,但是描述稍微有点凌乱。我整理了一下。
另外: sxtwl的生肖计算是按公历的1月1日计算的,正确的应该是以立春分割。立春日是公历的2月3 -5日,所以我单独写了个算法,以2月4日为界限计算生肖。
如何使用
1. 先安装 sxtwl
pip install sxtwl
2. 功能演示
点击(此处)折叠或打开
- import sxtwl
- lunar = sxtwl.Lunar()
- #下面可以使用lunar做些日历的操作
- # 使用前需要添加索引
- # 这个索引的内容可以自己定义,比如把简体字改成繁体字,或者把生肖的鼠改成老鼠。。。
- Gan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
- Zhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
- ShX = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]
- numCn = ["日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
- jqmc = ["冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑","白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"]
- ymc = ["十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" ]
- rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
- #需要定义一个day,这个day就是你要查询的时间,这个时间可以是阳历也可以是阴历。
- #通过阳历获取日期信息 (这里的信息有,阴历,阳历,二十四节气,天干地支,星期几等)
- day = lunar.getDayBySolar(2020, 5, 24) # 查询2020年05月24日
- #通过阴历获取日期信息 (这里的信息有,阴历,阳历,二十四节气,天干地支,星期几等)
- #True 代表当前月份是闰月的月份,False 代表当前月份不是闰月
- day = lunar.getDayByLunar(2020, 4, 2 , False) # 查询的日期是2020年四月初二(非闰月)
- # 后面就用这个day 来获取自己需要的信息
- # 各个参数获取
- day.y #公历年
- day.m #公历月
- day.d #公历日
- ymc[day.Lmc] # 阴历月
- rmc[day.Ldi] # 阴历日
- day.Lleap # True 代表当然月是闰月,False 代表当前月不是闰月
- numCn[day.week] # 星期
- sxtwl.J2000 + day.d0 # 儒略日,是以公元前4712年1月1日为历元,[史家为公元前4713年1月1日],是一个独立的连续不间断的记日长尺,主要是天文学家在使用
- Gan[day.Lyear2.tg] # 天干年
- Zhi[day.Lyear2.dz] # 地支年
- Gan[day.Lmonth2.tg] # 天干月
- Zhi[day.Lmonth2.dz] # 地支月
- Gan[day.Lday2.tg] #天干日
- Zhi[day.Lday2.dz] #地支日
- day.cur_dz #距冬至的天数
- day.cur_xz #距夏至的天数
- day.cur_lq #距立秋的天数
- day.cur_mz #距芒种的天数
- day.cur_xs #距小暑的天数
- # 使用举例
- print("公历:", day.y, "年", day.m, "月", day.d, "日") #结果 公历: 2020 年 5 月 24 日
- if day.Lleap:
- print("润", ymc[day.Lmc], "月", rmc[day.Ldi], "日")
- else:
- print(ymc[day.Lmc], "月", rmc[day.Ldi], "日")
- print("儒略日:JD", sxtwl.J2000 + day.d0)
- print("星期", numCn[day.week])
- print(Gan[day.Lyear2.tg], Zhi[day.Lyear2.dz], "年", Gan[day.Lmonth2.tg], Zhi[day.Lmonth2.dz], "月",Gan[day.Lday2.tg], Zhi[day.Lday2.dz], "日")
- print("距冬至", day.cur_dz, "天")
- print("距夏至", day.cur_xz, "天")
- print("距立秋", day.cur_lq, "天")
- print("距芒种", day.cur_mz, "天")
- print("距小暑", day.cur_xs, "天")
计算生肖:
if day.m==2:
if day.d ShengXiao = ShX[(day.y - 5)%12]
else:
ShengXiao = ShX[(day.y - 4)%12]
elif day.m==1:
ShengXiao = ShX[(day.y - 5)%12]
else:
ShengXiao = ShX[(day.y - 4)%12]