有没有Python3可用的农历转公历的包?
我想写个小脚本,内容是把一年中是周末且周末是在新月那几天(农历 27-3 日),但是现在找不到公历转农历的包,之前的工作如下:
#生成一个一年的日历
df = pd.DataFrame(pd.date_range(start='2017-01-01',end='2017-12-31'),columns=['公历'])
df = df.set_index(keys='公历')
#找出所有周末
df['星期几'] = df.index.weekday + 1
Sat = df['星期几'] == 6
Sun = df['星期几'] == 7
#找出国庆节,别的节太短或者和周末都挨着
National_Day = df['2017-10-01':'2017-10-07']
new_df = pd.concat([df[Sat | Sun],National_Day])
df2 = df.ix[new_df.sort_index().index.drop_duplicates()]
下一步就该找出这个日历的农历了,有没有人教教我怎么做?
pypi 上有个 lunarsolarcovter 是 py2 用的,我用不了
有没有Python3可用的农历转公历的包?
LunarSolarConverter 就 200 行代码,你自己改一下不就完了
有,lunardate 这个包可以。用 pip install lunardate 安装。
它主要做公历转农历,但反向转换(农历转公历)也能通过推算实现。给你个例子:
from lunardate import LunarDate
# 假设是农历2023年闰二月十五
ld = LunarDate(2023, 2, 15, isleap=True) # isleap 表示是否是闰月
# 直接转成公历date对象
solar_date = ld.toSolarDate()
print(solar_date) # 输出: 2023-04-05
# 再举个非闰月的例子,农历2023年正月初一
ld2 = LunarDate(2023, 1, 1)
print(ld2.toSolarDate()) # 输出: 2023-01-22
核心就是这个 LunarDate 类,初始化时传入农历年、月、日和 isleap 参数,然后调用 toSolarDate() 方法就得到公历的 datetime.date 对象。
注意月份和日期都是整数,isleap 是布尔值。这个包覆盖的年份范围挺广的,一般够用。
总结:用 lunardate。
标题是农转公,正文是公转农,要哪个?
!/usr/bin/env python3
# -- coding: utf-8 --
# lunar.py
# 2015/02/27 罗兵
google 这个能找到
公转农, github 搜到了,谢谢
之前只想着从 pypi 下载,没仔细看他内容,我以为会有别的时间包也能实现呢
有啊,你可以试一下 sxtwl,pip install sxtwl
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() #实例化日历库
#阴历转阳历
day = lunar.getDayByLunar(2030, 3, 27 , False)
print u"公历:", day.y, u"年", day.m, u"月", day.d, u"日"
if day.Lleap:
print u"阴历:润", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日"
else:
print u"阴历:", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日"
#同理,阳历转阴历
day = lunar.getDayBySolar(2018, 10, 20)
print u"公历:", day.y, u"年", day.m, u"月", day.d, u"日"
if day.Lleap:
print u"阴历:润", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日"
else:
print u"阴历:", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日"

