本文实例讲述了Python实现公历(阳历)转农历(阴历)的方法。分享给大家供大家参考,具体如下:
两个要点:
1、公历转农历用了查表法(第126行)
2、节气用了天文法?(第176行)
运行图 (背景是hao123万年历)
源代码:
# lunar.py # 2015/02/27 罗兵 import datetime class Lunar(object): #****************************************************************************** # 下面为阴历计算所需的数据,为节省存储空间,所以采用下面比较变态的存储方法. #****************************************************************************** #数组g_lunar_month_day存入阴历1901年到2050年每年中的月天数信息, #阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表30天,否则为29天 g_lunar_month_day = [ 0x4ae0, 0xa570, 0x5268, 0xd260, 0xd950, 0x6aa8, 0x56a0, 0x9ad0, 0x4ae8, 0x4ae0, #1910 0xa4d8, 0xa4d0, 0xd250, 0xd548, 0xb550, 0x56a0, 0x96d0, 0x95b0, 0x49b8, 0x49b0, #1920 0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada8, 0x2b60, 0x9570, 0x4978, 0x4970, 0x64b0, #1930 0xd4a0, 0xea50, 0x6d48, 0x5ad0, 0x2b60, 0x9370, 0x92e0, 0xc968, 0xc950, 0xd4a0, #1940 0xda50, 0xb550, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, 0xb4a8, 0x6ca0, #1950 0xb550, 0x55a8, 0x4da0, 0xa5b0, 0x52b8, 0x52b0, 0xa950, 0xe950, 0x6aa0, 0xad50, #1960 0xab50, 0x4b60, 0xa570, 0xa570, 0x5260, 0xe930, 0xd950, 0x5aa8, 0x56a0, 0x96d0, #1970 0x4ae8, 0x4ad0, 0xa4d0, 0xd268, 0xd250, 0xd528, 0xb540, 0xb6a0, 0x96d0, 0x95b0, #1980 0x49b0, 0xa4b8, 0xa4b0, 0xb258, 0x6a50, 0x6d40, 0xada0, 0xab60, 0x9370, 0x4978, #1990 0x4970, 0x64b0, 0x6a50, 0xea50, 0x6b28, 0x5ac0, 0xab60, 0x9368, 0x92e0, 0xc960, #2000 0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, #2010 0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, #2020 0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, #2030 0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, #2040 0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0, #2050 ] #数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年 g_lunar_month = [ 0x00, 0x50, 0x04, 0x00, 0x20, #1910 0x60, 0x05, 0x00, 0x20, 0x70, #1920 0x05, 0x00, 0x40, 0x02, 0x06, #1930 0x00, 0x50, 0x03, 0x07, 0x00, #1940 0x60, 0x04, 0x00, 0x20, 0x70, #1950 0x05, 0x00, 0x30, 0x80, 0x06, #1960 0x00, 0x40, 0x03, 0x07, 0x00, #1970 0x50, 0x04, 0x08, 0x00, 0x60, #1980 0x04, 0x0a, 0x00, 0x60, 0x05, #1990 0x00, 0x30, 0x80, 0x05, 0x00, #2000 0x40, 0x02, 0x07, 0x00, 0x50, #2010 0x04, 0x09, 0x00, 0x60, 0x04, #2020 0x00, 0x20, 0x60, 0x05, 0x00, #2030 0x30, 0xb0, 0x06, 0x00, 0x50, #2040 0x02, 0x07, 0x00, 0x50, 0x03 #2050 ] START_YEAR = 1901 # 天干 gan = '甲乙丙丁戊己庚辛壬癸' # 地支 zhi = '子丑寅卯辰巳午未申酉戌亥' # 生肖 xiao = '鼠牛虎兔龙蛇马羊猴鸡狗猪' # 月份 lm = '正二三四五六七八九十冬腊' # 日份 ld = '初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十' # 节气 jie = '小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至' def __init__(self, dt = None): '''初始化:参数为datetime.datetime类实例,默认当前时间''' self.localtime = dt if dt else datetime.datetime.today() def sx_year(self): # 返回生肖年 ct = self.localtime #取当前时间 year = self.ln_year() - 3 - 1 # 农历年份减3 (说明:补减1) year = year % 12 # 模12,得到地支数 return self.xiao[year] def gz_year(self): # 返回干支纪年 ct = self.localtime #取当前时间 year = self.ln_year() - 3 - 1 # 农历年份减3 (说明:补减1) G = year % 10 # 模10,得到天干数 Z = year % 12 # 模12,得到地支数 return self.gan[G] + self.zhi[Z] def gz_month(self): # 返回干支纪月(未实现) pass def gz_day(self): # 返回干支纪日 ct = self.localtime #取当前时间 C = ct.year // 100 #取世纪数,减一 y = ct.year % 100 #取年份后两位(若为1月、2月则当前年份减一) y = y - 1 if ct.month == 1 or ct.month == 2 else y M = ct.month #取月份(若为1月、2月则分别按13、14来计算) M = M + 12 if ct.month == 1 or ct.month == 2 else M d = ct.day #取日数 i = 0 if ct.month % 2 == 1 else 6 #取i (奇数月i=0,偶数月i=6) #下面两个是网上的公式 # http://baike.baidu.com/link"color: #800000">PS:这里再为大家推荐几款日历相关在线工具供大家参考:在线阴历/阳历转换工具:
http://tools.jb51.net/bianmin/yinli2yangli网页万年历日历:
http://tools.jb51.net/bianmin/webwannianli在线万年历日历:
http://tools.jb51.net/bianmin/wannianli在线万年历黄历flash版:
http://tools.jb51.net/bianmin/flashwnl另外,本站历史上的今天也有相似的农历日期显示功能:
http://tools.jb51.net/bianmin/lishi
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python日期与时间操作技巧总结》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]