diff --git a/.gitignore b/.gitignore index 60199c5..8f4807e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.xml *.pyc +/dist +/cnlunar.egg-info /.idea/ *.DS_Store diff --git a/README.md b/README.md index 941b95a..044fe42 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ $ pip3 install cnlunar

快速上手

``` +import datetime import cnlunar # a = cnlunar.Lunar() # 为空为当前时间 diff --git a/README.rst b/README.rst index 941b95a..9c0e808 100644 --- a/README.rst +++ b/README.rst @@ -1,188 +1,141 @@ -# cnlunar -

项目优点

-1、不使用寿星通式[Y*D+C]-L,而使用香港天文台数据(阴阳合历,节气准农历日期才能准) + import datetime -2、无数据库,依赖库少,运行快速,提供内容丰富 + import cnlunar -3、主要内容来自于《钦定协纪辨方书》,每一个神煞宜忌都有依据,遵循宜忌等第表,包含民用、御用事宜,且支持港式(通书配图)八字月柱算法-默认,通书原文文字农历月份算法,具体看date2LunarData.py + # a = cnlunar.Lunar() # 为空为当前时间 -4、不盈利,开源免费,长期有人维护 + a = cnlunar.Lunar(datetime.datetime(2019, 2, 4, 22, 30)) -5、民俗社会科学项目,不搞封建迷信,宜忌意义在于民间是将红白事合理分开,避免今日您宴请宾客,邻居办白事情况出现,引起邻里纠纷社会分裂。 - -特别鸣谢@DarkmoonRabbit(https://github.com/DarkmoonRabbit) - -相关产品: -翻黄历 https://www.fanhuangli.com/ - -万年历-最新专业桌面老黄‪历 https://apps.apple.com/cn/app/id1555822960 - -``` -$ pip3 install cnlunar -``` -

快速上手

- -``` -import cnlunar - -# a = cnlunar.Lunar() # 为空为当前时间 - -a = cnlunar.Lunar(datetime.datetime(2019, 2, 4, 22, 30)) -dic = { '日期': a.date, + '农历数字': (a.lunarYear, a.lunarMonth, a.lunarDay, '闰' if a.isLunarLeapMonth else ''), + '农历': '%s %s[%s]年 %s%s' % (a.lunarYearCn, a.year8Char, a.chineseYearZodiac, a.lunarMonthCn, a.lunarDayCn), + '星期': a.weekDayCn, + # 未增加除夕 + '今日节日': (a.get_legalHolidays(), a.get_otherHolidays(), a.get_otherLunarHolidays()), + '八字': ' '.join([a.year8Char, a.month8Char, a.day8Char, a.twohour8Char]), + '今日节气': a.todaySolarTerms, + '下一节气': (a.nextSolarTerm, a.nextSolarTermDate, a.nextSolarTermYear), + '今年节气表': a.thisYearSolarTermsDic, + '季节': a.lunarSeason, + '今日时辰': a.twohour8CharList, + '时辰凶吉': a.get_twohourLuckyList(), + '生肖冲煞': a.chineseZodiacClash, + '星座': a.starZodiac, + '星次': a.todayEastZodiac, + '彭祖百忌': a.get_pengTaboo(), + '彭祖百忌精简': a.get_pengTaboo(long=4, delimit='
'), + '十二神': a.get_today12DayOfficer(), + '廿八宿': a.get_the28Stars(), + '今日三合': a.zodiacMark3List, + '今日六合': a.zodiacMark6, + '今日五行': a.get_today5Elements(), + '纳音': a.get_nayin(), + '九宫飞星': a.get_the9FlyStar(), + '吉神方位': a.get_luckyGodsDirection(), + '今日胎神': a.get_fetalGod(), + '神煞宜忌': a.angelDemon, + '今日吉神': a.goodGodName, + '今日凶煞': a.badGodName, + '宜': a.goodThing, + '忌': a.badThing, + '时辰经络': a.meridians -} -``` - -

项目概述:

-由于三体运动(主要地球、太阳、月球)无法准确预测,目前二十四节气依然还是靠天文台观测,Yovey使用传说中[Y*D+C]-L方法实际有很多天数不准,def getSolarTerms(_date)12个if嵌套判断让代码变得十分冗余,由简书网友“大咖_247c”首先发现计算不准问题…… -【方案过程】 -![image.png](https://upload-images.jianshu.io/upload_images/2369108-a121d5e561adc30b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - -1、在校验过数据与公式差异后,第一方案是采用15%黄经夹角计算,计算后差异依然存在,地球椭圆形轨道一年内公转速度差异超过7%; -![开普勒.gif](https://upload-images.jianshu.io/upload_images/2369108-671532f9183aad1d.gif?imageMogr2/auto-orient/strip) - -2、在发现椭圆轨道问题后,尝试使用平均值、开普勒第二定律计算行星轨道,计算值已经十分贴近了,但依然和香港天文台数据有差异,恍然大悟,地球、月亮、太阳三个天体呈现无法完美预测的三体运动,甚至还包括木星引力影响(比如传说中九星连珠,虽然引力抵消微弱),而且太阳本身也在运动,地球和太阳的质量也不是永恒不变的,这就导致地球的恒星年相对稳定,但回归年浮动振荡; -![image.png](https://upload-images.jianshu.io/upload_images/2369108-2cdf50bbe6b62989.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - -3、当试过所有技术物理原理还无法调节误差后,最终使用了Chen Jian的核心设计理念,添加了十六进制加存二十四节气。(还是要靠香港天文台) -coding=UTF-8 -1901~2100年农历数据表 -Author: cuba3 -base code by Yovey , https://www.jianshu.com/p/8dc0d7ba2c2a -powered by Late Lee, http://www.latelee.org/python/python-yangli-to-nongli.html#comment-78 -other author:Chen Jian, http://www.cnblogs.com/chjbbs/p/5704326.html -数据来源: http://data.weather.gov.hk/gts/time/conversion1_text_c.htm - -[【GITHUB/cuba3】:pyLunarCalendar项目地址>>https://github.com/OPN48/pyLunarCalendar](https://github.com/OPN48/pyLunarCalendar]) - -跟进Chen Jian的设计思路,增加了一层向量压缩。 -因为24节气每个月新历月固定有两个,所以list保持顺序,月份就不用存了,一定是1、1、2、2、3、3…… -只记录日期的话,日期数据过大,所以对200年内4800个数据进行分组比对,求出最小公约数,得出最小公约年向量[4, 19, 3, 18, 4, 19, 4, 19, 4, 20, 4, 20, 6, 22, 6, 22, 6, 22, 7, 22, 6, 21, 6, 21],将爬取数据减去这个最小公约向量,就得到了一个元素最大值不大于3的矩阵。 -所有数字不大于3,两个二进制就可满足存储一个日期,一个十六进制就能存储一个月,利用Python3 位移算法 << 2 将原本庞大的txt文本压缩成长度200的12位16进制list。 -``` -# 1901-2100年二十节气最小公约数序列 向量压缩法 -encryptionVectorList=[4, 19, 3, 18, 4, 19, 4, 19, 4, 20, 4, 20, 6, 22, 6, 22, 6, 22, 7, 22, 6, 21, 6, 21] - -# 1901-2100年二十节气数据 每个元素的存储格式如下: -# 1-24 -# 节气所在天(减去节气最小公约数) -# 1901-2100年香港天文台公布二十四节气按年存储16进制,1个16进制为4个2进制 -solarTermsData=[ - 0x6aaaa6aa9a5a, 0xaaaaaabaaa6a, 0xaaabbabbafaa, 0x5aa665a65aab, 0x6aaaa6aa9a5a, # 1901 ~ 1905 - 0xaaaaaaaaaa6a, 0xaaabbabbafaa, 0x5aa665a65aab, 0x6aaaa6aa9a5a, 0xaaaaaaaaaa6a, - 0xaaabbabbafaa, 0x5aa665a65aab, 0x6aaaa6aa9a56, 0xaaaaaaaa9a5a, 0xaaabaabaaeaa, - 0x569665a65aaa, 0x5aa6a6a69a56, 0x6aaaaaaa9a5a, 0xaaabaabaaeaa, 0x569665a65aaa, - 0x5aa6a6a65a56, 0x6aaaaaaa9a5a, 0xaaabaabaaa6a, 0x569665a65aaa, 0x5aa6a6a65a56, - 0x6aaaa6aa9a5a, 0xaaaaaabaaa6a, 0x555665665aaa, 0x5aa665a65a56, 0x6aaaa6aa9a5a, - 0xaaaaaabaaa6a, 0x555665665aaa, 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0xaaaaaaaaaa6a, - 0x555665665aaa, 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0xaaaaaaaaaa6a, 0x555665665aaa, - 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0xaaaaaaaaaa6a, 0x555665655aaa, 0x569665a65a56, - 0x6aa6a6aa9a56, 0xaaaaaaaa9a5a, 0x5556556559aa, 0x569665a65a55, 0x6aa6a6a65a56, - 0xaaaaaaaa9a5a, 0x5556556559aa, 0x569665a65a55, 0x5aa6a6a65a56, 0x6aaaa6aa9a5a, - 0x5556556555aa, 0x569665a65a55, 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0x55555565556a, - 0x555665665a55, 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0x55555565556a, 0x555665665a55, - 0x5aa665a65a56, 0x6aaaa6aa9a5a, 0x55555555556a, 0x555665665a55, 0x5aa665a65a56, - 0x6aaaa6aa9a5a, 0x55555555556a, 0x555665655a55, 0x5aa665a65a56, 0x6aa6a6aa9a5a, - 0x55555555456a, 0x555655655a55, 0x5a9665a65a56, 0x6aa6a6a69a5a, 0x55555555456a, - 0x555655655a55, 0x569665a65a56, 0x6aa6a6a65a56, 0x55555155455a, 0x555655655955, - 0x569665a65a55, 0x5aa6a5a65a56, 0x15555155455a, 0x555555655555, 0x569665665a55, - 0x5aa665a65a56, 0x15555155455a, 0x555555655515, 0x555665665a55, 0x5aa665a65a56, - 0x15555155455a, 0x555555555515, 0x555665665a55, 0x5aa665a65a56, 0x15555155455a, - 0x555555555515, 0x555665665a55, 0x5aa665a65a56, 0x15555155455a, 0x555555555515, - 0x555655655a55, 0x5aa665a65a56, 0x15515155455a, 0x555555554515, 0x555655655a55, - 0x5a9665a65a56, 0x15515151455a, 0x555551554515, 0x555655655a55, 0x569665a65a56, - 0x155151510556, 0x555551554505, 0x555655655955, 0x569665665a55, 0x155110510556, - 0x155551554505, 0x555555655555, 0x569665665a55, 0x55110510556, 0x155551554505, - 0x555555555515, 0x555665665a55, 0x55110510556, 0x155551554505, 0x555555555515, - 0x555665665a55, 0x55110510556, 0x155551554505, 0x555555555515, 0x555655655a55, - 0x55110510556, 0x155551554505, 0x555555555515, 0x555655655a55, 0x55110510556, - 0x155151514505, 0x555555554515, 0x555655655a55, 0x54110510556, 0x155151510505, - 0x555551554515, 0x555655655a55, 0x14110110556, 0x155110510501, 0x555551554505, - 0x555555655555, 0x14110110555, 0x155110510501, 0x555551554505, 0x555555555555, - 0x14110110555, 0x55110510501, 0x155551554505, 0x555555555555, 0x110110555, - 0x55110510501, 0x155551554505, 0x555555555515, 0x110110555, 0x55110510501, - 0x155551554505, 0x555555555515, 0x100100555, 0x55110510501, 0x155151514505, - 0x555555555515, 0x100100555, 0x54110510501, 0x155151514505, 0x555551554515, - 0x100100555, 0x54110510501, 0x155150510505, 0x555551554515, 0x100100555, - 0x14110110501, 0x155110510505, 0x555551554505, 0x100055, 0x14110110500, - 0x155110510501, 0x555551554505, 0x55, 0x14110110500, 0x55110510501, - 0x155551554505, 0x55, 0x110110500, 0x55110510501, 0x155551554505, - 0x15, 0x100110500, 0x55110510501, 0x155551554505,0x555555555515] -``` -4、根据《四库全书 - 协纪辨方书》添加了部分的吉神凶煞、八字,修正了部分八字月柱算法,关于值神方面的算法没有采用农历月算,而是根据农历八字月柱为依据,不同算法之间有细微区别。主要参考了老黄历、聚宝堂日历等,待持续优化 -铺注条例: -凡铺注《万年历》、《通书》,先依用事次第察其所宜忌之日,于某日下注宜某事,某日下注忌某事,次按宜忌,较量其凶吉之轻重,以定去取。 -凡宜宣政事,布政事之日,只注宜宣政事。 -凡宜营建宫室、修宫室之日,只注宜营建宫室。 - -凡吉足胜凶,从宜不从忌者,如遇德犹忌之事,则仍注忌。 - -凡吉凶相抵,不注宜亦不注忌者,如遇德犹忌之事,则仍注忌。 - -凡德合、赦愿、月恩、四相、时德等日,不注忌进人口、安床、经络、酝酿、开市、立券、交易、纳财、开仓库、出货财。如遇德犹忌,及从忌不从宜之日,则仍注忌。 -凡天狗寅日忌祭祀,不注宜求福、祈嗣。 - -凡卯日忌穿井,不注宜开渠。壬日忌开渠,不注宜穿井。 -凡巳日忌出行,不注宜出师、遣使。 -凡酉日忌宴会,亦不注宜庆赐、赏贺。 -凡丁日忌剃头,亦不注宜整容。 - -凡吉凶相抵,不注忌祈福,亦不注忌求嗣。 - -凡忌诏命公卿、招贤,不注宜施恩、封拜、举正直、袭爵受封。 -凡忌施恩、封拜、举正直、袭爵受封,亦不注宜诏命公卿、招贤。 -凡宜宣政事之日遇往亡则改宣为布。 -凡月厌忌行幸、上官,不注宜颁诏、施恩封拜、诏命公卿、招贤、举正直。遇宜宣政事之日,则改宣为布。 - -凡吉凶相抵,不注忌结婚姻,亦不注忌冠带、纳采问名、嫁娶、进人口,如遇德犹忌之日则仍注忌。 -凡吉凶相抵,不注忌嫁娶,亦不注忌冠带、结婚姻、纳采问名、进人口、搬移、安床,如遇德犹忌之日,则仍注忌。遇不将而不注忌嫁娶者,亦仍注忌。遇亥日、厌对、八专、四忌、四穷而仍注忌嫁娶者,只注所忌之事,其不忌者仍不注忌。 -凡吉凶相抵,不注忌搬移,亦不注忌安床。不注忌安床,亦不注忌搬移。如遇德犹忌之日,则仍注忌。 -凡吉凶相抵,不注忌解除,亦不注忌整容、剃头、整手足甲。如遇德犹忌之日,则仍注忌。 -凡吉凶相抵,不注忌修造动土、竖柱上梁,亦不注忌修宫室、缮城郭、筑提防、修仓库、鼓铸、苫盖、修置产室、开渠穿井、安碓硙、补垣塞穴、修饰垣墙、平治道涂、破屋坏垣。如遇德犹忌之日,则仍注忌。 -凡吉凶相抵,不注忌开市,亦不注忌立券、交易、纳财。不注忌纳财,亦不注忌开市、立券、交易。不注忌立券、交易,亦不注忌开市、纳财。 -凡吉凶相抵,不注忌开市、立券、交易,亦不注忌开仓库、出货财。如遇专忌之日,则仍注忌。 -凡吉凶相抵,不注忌牧养,亦不注忌纳畜。不注忌纳畜,亦不注忌牧养。 -凡吉凶相抵,有宜安葬不注忌启攒,有宜启攒不注忌安葬。 - -凡土府、土符、地囊,只注忌补垣,亦不注宜塞穴。 -凡开日,不注宜破土、安葬、启攒,亦不注忌。遇忌则注。 -凡四忌、四穷只忌安葬。如遇鸣吠、鸣吠对亦不注宜破土、启攒。 -凡天吏、大时不以死败论者,遇四废、岁薄、逐阵仍以死败论。 -凡岁薄、逐阵日所宜事,照月厌所忌删去,所忌依然依从本日。 - -凡二月甲戌、四月丙申、六月甲午、七月戊申、八月庚辰、九月辛卯、十月甲子、十二月甲子、德合与赦(天赦)、愿(天愿)所会之辰,诸事不忌。 - -5、星次 -星纪、玄枵、娵訾、降娄、大梁、实沈、鹑首、鹑火、鹑尾、寿星、大火、析木 \ No newline at end of file + +八字月柱与八字日柱算神煞版本 + +日期 : 2021-02-07 10:30:00 + +农历数字 : (2020, 12, 26, '') + +农历 : 二零二零 庚子[鼠]年 腊月大廿六 + +星期 : 星期日 + +今日节日 : ('', '京汉铁路罢工纪念', '') + +八字 : 庚子 庚寅 丙戌 癸巳 + +今日节气 : 无 + +下一节气 : ('雨水', (2, 18), 2021) + +今年节气表 : {'小寒': (1, 5), '大寒': (1, 20), '立春': (2, 3), '雨水': (2, 18), '惊蛰': (3, 5), '春分': (3, 20), '清明': (4, 4), '谷雨': (4, 20), '立夏': (5, 5), '小满': (5, 21), '芒种': (6, 5), '夏至': (6, 21), '小暑': (7, 7), '大暑': (7, 22), '立秋': (8, 7), '处暑': (8, 23), '白露': (9, 7), '秋分': (9, 23), '寒露': (10, 8), '霜降': (10, 23), '立冬': (11, 7), '小雪': (11, 22), '大雪': (12, 7), '冬至': (12, 21)} + +季节 : 孟春 + +今日时辰 : ['戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳', '甲午', '乙未', '丙申', '丁酉', '戊戌', '己亥', '庚子'] + +时辰凶吉 : ['凶', '凶', '吉', '凶', '吉', '吉', '凶', '凶', '吉', '吉', '凶', '吉', '凶'] + +生肖冲煞 : 狗日冲龙 + +星座 : 水瓶座 + +星次 : 娵訾 + +彭祖百忌 : 丙不修灶 必见灾殃,戌不吃犬 作怪上床 + +彭祖百忌精简 : 丙不修灶
戌不吃犬 + +十二神 : ('成', '司命', '黄道日') + +廿八宿 : 星日马 + +今日三合 : ['虎', '马'] + +今日六合 : 兔 + +今日五行 : ['天干', '丙', '属火', '地支', '戌', '属土', '纳音', '土', '属土', '廿八宿', '星', '宿', '十二神', '成', '日'] + +纳音 : 屋上土 + +九宫飞星 : 279135684 + +吉神方位 : ['喜神西南', '财神西南', '福神西北', '阳贵正西', '阴贵西北'] + +今日胎神 : 厨灶栖外西北 + +神煞宜忌 : ((['月德', '三合', '四相', '天喜', '月恩', '天官'], ['月厌', '神号', '伏兵', '地火', '受死', '飞廉', '大煞', '四击', '宝日']), (['祭祀', '出行', '结婚姻', '宴会', '嫁娶', '修造', '求医疗病', '上表章', '上官', '入学', '进人口', '竖柱上梁', '经络', '开市', '纳财', '安碓硙', '栽种', '牧养', '安葬', '选将', '求嗣', '酝酿', '临政', '庆赐', '安抚边境', '解除', '筑堤防', '祈福', '出师', '纳采', '纳畜', '营建', '立券交易', '缮城郭', '修宫室', '恤孤茕', '覃恩', '裁制', '开仓', '修仓库', '上册', '雪冤', '搬移'], ['剃头', '冠带', '修置产室', '开渠', '穿井', '平治道涂', '破屋坏垣', '伐木', '畋猎', '破土', '启攒', '布政事', '修饰垣墙', '整手足甲', '远回', '整容', '补垣', '取鱼', '鼓铸', '塞穴'])) + +今日吉神 : ['月德', '三合', '四相', '天喜', '月恩', '天官'] + +今日凶煞 : ['月厌', '神号', '伏兵', '地火', '受死', '飞廉', '大煞', '四击', '宝日'] + +宜忌等第 : 中:吉不抵凶,遇德从宜不从忌,不遇从忌不从宜。 + +宜 : ['祭祀', '出行', '结婚姻', '宴会', '嫁娶', '修造', '求医疗病', '上表章', '上官', '入学', '进人口', '竖柱上梁', '经络', '开市', '纳财', '安碓硙', '栽种', '牧养', '安葬', '选将', '求嗣', '酝酿', '临政', '庆赐', '安抚边境', '解除', '筑堤防', '祈福', '出师', '纳采', '纳畜', '营建', '立券交易', '缮城郭', '修宫室', '恤孤茕', '覃恩', '裁制', '开仓', '修仓库', '上册', '雪冤', '搬移'] + +忌 : ['剃头', '冠带', '修置产室', '开渠', '穿井', '平治道涂', '破屋坏垣', '伐木', '畋猎', '破土', '启攒', '布政事', '修饰垣墙', '整手足甲', '远回', '整容', '补垣', '取鱼', '鼓铸', '塞穴'] + +时辰经络 : 脾 \ No newline at end of file diff --git a/cnlunar/__init__.py b/cnlunar/__init__.py index b2896b4..a701d63 100644 --- a/cnlunar/__init__.py +++ b/cnlunar/__init__.py @@ -1,2 +1 @@ -from cnlunar.lunar import Lunar - +from cnlunar.lunar import Lunar \ No newline at end of file diff --git a/cnlunar/demo.py b/cnlunar/demo.py index e9c91d1..d522cea 100644 --- a/cnlunar/demo.py +++ b/cnlunar/demo.py @@ -1,6 +1,5 @@ import datetime import cnlunar -# 测试数据 print('a = cnlunar.Lunar(datetime.datetime(2021, 2, 7, 10, 30), godType=\'8char\')') print('\n八字月柱与八字日柱算神煞版本') a = cnlunar.Lunar(datetime.datetime(2021, 2, 7, 10, 30), godType='8char') diff --git a/setup.py b/setup.py index 334b906..47e481b 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,10 @@ from setuptools import setup setup( name='cnlunar', - version='0.0.6', + version='0.0.7', packages=['cnlunar'], url='https://github.com/OPN48/pyLunarCalendar', author='cuba3', author_email='cuba3@163.com', + long_description=open('README.rst').read(), )