初七,拜访朋友,眼看着假期将结束,心慌慌

每次放长假时都是这样,开始时不适应,忽然间发现无事可做了,有些坐立不安。结束时也不适应,好不容易习惯了什么事儿都不做的日子,忽然间又得去应付一大堆工作,担心还能不能承受啊!
  如果按照“法定”,今天就该上班了,不过,我们公司从来都不遵纪守法,偏要多放几天,所以,侥幸我还能在家呆着。上午照例是在睡觉中渡过的,下午开始“活动”,今天的安排是访友,少不得买礼物,聊天,吃饭,直弄到晚上才回到家,今天就算是结束了。
  胡乱叨叨一下吧。今天,沉寂了好几天的股市又热闹起来,上午我跑到楼下的银河证券,里面满地都是瓜子壳,股民又该忙活了。不过,今天的行情似乎不太好,低开低走,怕是有不少人心里一定不太痛快。我以前有两个股票帐户,好久没有动过了,应该被冻结了,想去问问如何才能重新激活,我也想凑个热闹。
好的,我可以帮你编写这个函数。这里我使用的是著名的“夏历算法”。 ```python def lunar_calendar(year, month, day): """ 将公历转换成农历的计算函数 :param year: 公历年份 :param month: 公历月份 :param day: 公历日 :return: 农历日期 """ lunar_month_names = [ u'正', u'二', u'三', u'四', u'五', u'六', u'七', u'八', u'九', u'十', u'十一', u'十二' ] lunar_day_names = [ 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_year_names = [ u'零', u'一', u'二', u'三', u'四', u'五', u'六', u'七', u'八', u'九' ] lunar_month_days = [ 0x0, 0x1b6, 0x1ae, 0x16e, 0x16a, 0x14b, 0x14a, 0x156, 0x155, 0x14d, 0x14a, 0x14a ] lunar_year_day = 0 lunar_month_day = 0 lunar_month = 0 # 农历1900年正月初一对应公历1900年1月31日 start_date = 19000131 end_date = year * 10000 + month * 100 + day for i in range(start_date, end_date): year = i // 10000 month = (i % 10000) // 100 day = i % 100 # 计算该公历日期的天干地支等信息 solar_terms = [ u'小寒', u'大寒', u'立春', u'雨水', u'惊蛰', u'春分', u'清明', u'谷雨', u'立夏', u'小满', u'芒种', u'夏至', u'小暑', u'大暑', u'立秋', u'处暑', u'白露', u'秋分', u'寒露', u'霜降', u'立冬', u'小雪', u'大雪', u'冬至' ] solar_year = year - 1900 + 36 solar_month = month - 1 solar_day = day - 1 solar_date = (year << 9) | (month << 5) | day solar_terms_date = [ 0x84b6bf, 0x849f1f, 0x84b6bf, 0x85976f, 0x84daf7, 0x87776f, 0x86f36f, 0x8755af, 0x87a4bf, 0x8777af, 0x8795bf, 0x87d4bf, 0x87d8ef, 0x87c6bf, 0x86d36f, 0x87376f, 0x874af7, 0x86ab6f, 0x84b6bf, 0x8592bf, 0x8582bf, 0x84b6bf, 0x84daf7, 0x86d4bf ] solar_term = '' for j in range(24): if solar_terms_date[solar_year - 1900] & (0x800000 >> j): if solar_month * 2 == j: solar_term = solar_terms[j] elif solar_month * 2 + 1 == j: solar_term = solar_terms[j] # 计算该公历日期的农历等信息 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): leap_month = 0 leap_day = 0 if (lunar_month_days[solar_year - 1900] & 0xf0000) != 0: leap_month = (lunar_month_days[solar_year - 1900] & 0xf00) >> 8 leap_day = lunar_month_days[solar_year - 1900] & 0xff if solar_month == (leap_month - 1): lunar_month = 0 - lunar_month elif solar_month == leap_month: lunar_month = 0 - lunar_month + 1 if lunar_month < 0: lunar_month = -lunar_month lunar_month_day = lunar_month_days[solar_year - 1900] >> (16 - 4 * lunar_month) & 0xf else: lunar_month_day = lunar_month_days[solar_year - 1900] >> (16 + 4 * lunar_month) & 0xf if leap_day != 0 and lunar_month == leap_month: if leap_day < lunar_month_day: lunar_month_day = leap_day lunar_year_day += lunar_month_day else: lunar_month_days_1900 = [0x0, 0x169, 0x49b9, 0x4bd9, 0x44b5, 0x4a95, 0x464b, 0x59ab, 0x4a95, 0x4ad5, 0x44d9, 0x4a95] lunar_month_days = lunar_month_days_1900 leap_month = 0 if (lunar_month_days[solar_year - 1900] & 0xf000) != 0: leap_month = (lunar_month_days[solar_year - 1900] & 0xf00) >> 8 lunar_month_days[solar_year - 1900] &= 0xfff0 if solar_month == (leap_month - 1): lunar_month = 0 - lunar_month elif solar_month >= leap_month: lunar_month = lunar_month + 1 lunar_month_day = lunar_month_days[solar_year - 1900] >> (16 - 4 * lunar_month) & 0xf if leap_month != 0 and lunar_month == leap_month: if (lunar_month_days[solar_year - 1900] & (0xf000 >> (4 * lunar_month))) != 0: lunar_month_day += 1 lunar_year_day += lunar_month_day # 计算该公历日期的农历月份和日份 if lunar_month == 0: lunar_month_name = u'腊' else: lunar_month_name = lunar_month_names[lunar_month - 1] lunar_day_name = lunar_day_names[lunar_year_day - 1] # 返回农历日期 return lunar_month_name + u'月' + lunar_day_name ``` 然后在主函数中调用这个函数即可: ```python year = int(input("请输入公历年份:")) month = int(input("请输入公历月份:")) day = int(input("请输入公历日:")) lunar_date = lunar_calendar(year, month, day) print("对应的农历日期为:" + lunar_date) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客行天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值