C++算法系列之中国农历的算法C语言

图(1)没有闰月情况下朔日与冬至节气关系图

图中上排数字是公历月的编号,黑色圆点代表朔日,黑色三角形代表冬至节气。图(2)显示了2012年有闰月的情况下朔日和冬至的关系:

图(2)有闰月情况下朔日与冬至节气关系图

表(2)2011年朔望月与公历日期关系表

编号为1和2的两个朔日之间的朔望月是十一月,因为冬至节气落在这个朔望月,其它月的月名依次类推,正月的朔日就是春节。输出公历和农历双历时,以月(公历)为单位,从每月第一天开始,依次判断每一天属于哪个朔望月,确定这一天的农历月名,然后比较这一天和这个朔望月的朔日之间相差几天,记为农历日期。以2011年1月1日为例,这一天在2010年12月6日(2010年农历十一月的朔日)和2011年1月4日之间(2010年农历十二月的朔日),查表(1)可知对应的农历月是十一月,这一天和2010年12月6日相差26天,因此这一天的农历日期就是“廿七”。再以2011年2月3日(春节)这一天为例,查朔望月表得知2月3日属于从2月3日开始的朔望月,这个朔望月的月名是正月,而2月3日就是月首,农历日期是初一,正月初一就是春节。

5doubleCalculateSolarTerms(intyear,intangle);

8doubleCalculateMoonShuoJD(doubletdJD);

生成指定公历年份的公历和农历的双历年历的流程如下:

图(3)计算公农历双历年历的流程

voidCChineseCalendar::GetAllSolarTermsJD(intyear,intstart,double*SolarTerms){inti=0;intst=start;while(i<25){doublejd=CalculateSolarTerms(year,st*15);if(st==WINTER_SOLSTICE){year++;}st=(st+1)%SOLAR_TERMS_COUNT;}}start参数是节气的索引,定义二十四节气的索引如下:

图(5)演示程序的界面

小知识1:民间历法和历理历法

小知识2:通式寿星公式

“通式寿星公式”是前人整理出来的一个用于计算每年立春日期的经验公式:

Date=向下取整(Y*D+C)-L

其中,Y是年份,D的值是0.2422,C是经验值,取决于节气和年份,对于21世纪,立春节气的C值是4.475,春分节气的C值是20.646等等;

L是闰年数,其计算公式为:

L=向下取整(Y/4)-向下取整(Y/100)+向下取整(Y/400)

用“通式寿星公式”确定2011年立春日期的过程如下:

L=int(2011/4)–int(2011/100)+int(2011/400)=502–20+5=487

Date=int(2011×0.2422+4.475)-487=491–487=4

所以,2011年的立春日期是2月4日。

小知识3:计算节气和朔日的经验公式

F=365.242*(y–1900)+6.2+15.22*x-1.9*sin(0.262*x)

其中x是节气的索引,0代表小寒,1代表大寒,其它节气按照顺序类推。

计算从1900年开始第m个朔日的公式是:

M=1.6+29.5306*m+0.4*sin(1-0.45058*m)

小知识4:平朔和定朔

小知识5:正月初一和立春节气

立春是二十四节气之首,所以古代民间都是在“立春”这一天过节,相当于现代的春节(中国古代即是节气也是节日的情况很多,比如清明、冬至等等)。农历年从正月初一开始没有争议,但是农历生肖年从何时开始却一直有争议,目前多数人都认为“立春”节气是农历生肖年的开始。因为在中国古代历法中,十二生肖的计算与天干地支有很大关系,所以在“论天干地支、计算廿四节气”的情况下,“立春”节气应该是新生肖的开始。对于普通老百姓来说,习惯于认为正月初一是生肖年的开始,因此,正月初一和“立春”节气之间出生的小孩,在确定属相的时候就有点麻烦了。属龙还是属蛇?这是个问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

THE END
1.春节加班工资如何计算春节加班工资如何计算 导读:根据春节放假规定,农历正月初一到正月初三为国家法定节假日,其余四天为调休假。因此春节正月初一到正月初三加班的应该支付劳动者三倍工资报酬,即为月基本工资÷21.75÷8×加班小时数×3;其余时间加班的应该支付劳动者两倍工资报酬,即为月基本工资÷21.75÷8×加班小时数×2。https://www.64365.com/zs/705754.aspx
2.闰年怎么算php,PHP日期操作类代码农历这是一个实用的PHP日期时间操作类,里面包括了公历-农历转换、转换成中文日期格式、计算农历相隔天数、根据阴历年获取生肖、获取阴历月份的天数、获取农历每年的天数、获取闰月、计算阴历日期与正月初一相隔的天数、计算2个公历(阳历)日期之间的天数、根据距离正月初一的天数计算阴历日期、获取天干地支纪年等,PHP日期操作类https://blog.csdn.net/weixin_39690391/article/details/116080966
3.农历是怎么算的定义以平均月相最缺的一天为初一,作为一月之始。那么,新月出现的那天就是初一,是月份的开始。例如: 本月新月下月新月 农历月长 公历5月1日13时5月31日01时30天 公历5月1日01时 5月30日13时29天 那么,会出现一个月有29天或者30天两种情况。我们定大月30天,小月29天。每月多少天以天文计算结果为准。满月http://www.360doc.com/content/18/0607/13/29712886_760393658.shtml
4.生日农历怎么算1. 使用农历定历表:农历定历表会标注每年的农历日期,可以通过查找自己出生年份对应的日期,来确定生日的农历日期。 2. 使用农历算法:根据初一的公历和农历对应日期的规律,可以通过计算出生年份的公历日期和农历日期的差值,来确定生日的农历日期。 3. 使用手机或电脑应用程序:现代科技已经开发了很多手机或电脑应用程序,https://m.51dongshi.com/eedfrdbrsvdhd.html
5.过年带薪休假工资如何计算,相关规定有哪些一、 过年带薪休假工资如何计算 过年带薪休假工资是按照标准工作时间内工作的工资标准支付的,其具体计算公式为:职工本人月工资÷月计薪天数×休假天数。 二、 过年带薪休假工资相关规定有哪些 过年带薪休假工资相关规定有:过年有三天带薪假,分别是农历正月初一、初二、初三。 找法网提醒,用人单位凡在春节前三天(初一、https://china.findlaw.cn/zhishi/a1736539.html
6.天干地支月柱计算方法月柱由月干与月支组成 与干支纪年始于立春相对应,干支纪月法采用每个地支对应二十四节气自某节气至下一个节气,以交节时间决定起始的一个月期间,不是农历某月初一至月底。如何计算节气https://www.jianshu.com/p/4fa27478b7d3
7.谈谈农历mob604757008d56的技术博客我国现行的农历,经过了若干次迭代,形成了如今的版本。农历,精确地反映了太阳、地球、月亮的天体运动的相对位置。2016年11月30日,农历中的二十四节气被正式列入联合国教科文组织人类非物质文化遗产名录。那么,农历是如何定义的,年份又是如何计算的,农历的月是如何划分的,二十四节气的天文学意义是什么以及如何用计算机https://blog.51cto.com/u_15127660/2784424