阳历转化成农历算法
阴历阳历转换计算公式

1、阳历日期推算阴历日期的方法:前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。
如要知道1984年6月8日是阴历几日?可以利用公式推算阴历日期:设:公元年数-1977(或1901)=4Q+R则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n(注:式中Q、R、n均为自然数,R<4)例:1994年5月7日的阴历日期为:1994-1977=17=4×4+1故:Q=4,R=1 则:5月7日的阴历日期为:14×4+10.6(1+1)+(31+28+31+31+7)-29.5n=204.2- 29.5n然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日2.公历换算为农历二十四节气在黄道上的位置是固定的,但各年有平年和闰年之分,就使得回归年天数与实际天数不等,每年在日历上可差一天。
这样可以将阴历经过任意整回归年在现在的日历上查到阳历(阳历一年相当阴历的月数为365.2422/29.530588=12.36827个月)。
例如,可先在1995年的日历上查得与(该年)阴历对应的阳历日期,这样就找到了临时落脚点,也就是找到了阴阳互换的关键。
例如,可先以阴历四月初一(日)为引数,在1995年日历上查到对应的阳历为4月30日。
由于已经计算出经过的月数,将经过的月数的尾数(小数)化为日,加在4月30日上,就得到经过(1995-1070)整年数的阳历日期,也就是起始阴历日期对应的阳历日期,即得到了待查的日期为4月30日加上0.64957×29.530588得到(1070年)5月19.1821840日。
这样就得到了所给例子的阴阳历日期换算结果……”。
0.64957月的由来,(1995-1070)×12.36827=11440.64957月已知依泽公生于梁龙德二年(922)六月二十一日,依下表提供的2099年各月初一日的公历月日数,可以算出龙德二年六月二十一日的公历月日数公元2099年农历各月初一日的公历月日(2099-922)×12.36827=1455.45379月余数为0.45379月×29.530588日=13.4O日因2099年五月初一日(包括该年闯二月)在公历6月19日,加上计算所得的13日为龙德二年六月初一日的公历月日,即该年7月2日,则该年农历六月二十一日为该年7月22日。
【公历年份换算农历干支纪年口诀】(含公元前后两种换算方法公式)简单、实用、易学、好记

【公历年份换算农历干支纪年口诀】(含公元前后两种换算方法公式)简单、实用、易学、好记【公历年份换算农历干支纪年口诀】干支纪年法是中国历法上自古以来就一直使用的纪年方法,采用的是阴阳合历。
干支是天干和地支的总称。
把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的“干支表”。
干支纪年以每年春节换年。
而在历史教学中记录一些事件的发生时间都是采用公元纪年,公元纪年和干支纪年有一个简单的换算口诀如下:一,用数字对应天干地支:自然数: 1 2 3 4 5 6 7 8 9 0天干:甲乙丙丁戊己庚辛壬癸自然数: 1 2 3 4 5 6 7 8 9 10 11 0地支:子丑寅卯辰巳午未申酉戌亥二,举例(以2018为例):公元年数减去3——2018-3=201510除余數是天干——2015÷10=201……5(戊)该数再用12除——2015÷12=167……11(戌)余数就把地支显所以2018年按干支纪年就是戊戌年。
以上是公历公元年份换算成农历干支纪年的计算方法。
下面姜毅同志研究发现了另一段年份的换算方法,即:公历公元前年份换算成农历干支纪年的计算方法:一,用數字對應天干地支:0 9 8 7 6 5 4 3 2 1天干:甲乙丙丁戊己庚辛壬癸0 1110 9 8 7 6 5 4 3 2 1地支:子丑寅卯辰巳午未申酉戍亥二,口訣並舉例(以公元前57年為例):公元前年數加3:57+3=601.60除10的余數是天干:60÷10=6……0(0对应的天干是甲);还有一种更简单明了的方法,就是年数加3后的和不用作除10计算,直接用和的个位数与天干对应即可。
2.60除12的余数是地支:60÷12=5……0(0对应的地支是子)余数就把地支显所以公元前57年换算成农历干支纪年就是甲子年。
又如:将公元前1250年换算成干支年:1250+3=1253① 和的个位3对应的天干为辛②1253÷12=104 (5)余数5对应的地支为未故公元前1250年为辛未年。
农历阴历转换

农历阴历转换
阴历转换是一种将阳历(按照公历中使用的格里高利历)转换为风俗习惯上使
用的阴历的过程。
阴历转换起源于中国,其它东亚国家也采用阴历作为其官方历法,比如朝鲜、日本和越南。
那么如何将阳历日期转换为阴历日期呢?其实很简单,只需要以下几步即可完成:
一、计算阴历新月日期
1.确定阴历新月日期。
根据中国传统历法,每一个月开始时均会有新月,即朔月。
2.从公元元年(即2012年)开始,每28个星期(即四个月),朔月日期会被
重置为一样。
3.根据需要查找要转换的阳历日期在该时期内的位置,找出其朔月日期。
二、计算阴历闰月
1.在计算月份时,也要考虑到闰月的存在,因为每个月的长度也会因此而有所
不同。
2.要想知道一个月是否为闰月,需要从公元元年起,根据查找其每19年的太
阳月历中有多少闰月,以确定是否当前月份为闰月。
三、计算阴历日期
1.在确定当前月份是否为闰月后,就可以根据阴历月份长度计算当前日期应该
位于哪个月份,并且确定当前日期所在月份的具体日期。
2.最后再将当前月份加上朔月日期,即可得出最终的阴历日期。
以上就是阴历转换的一般步骤,大家可以根据以上步骤轻松将阳历日期转换为
阴历日期。
此外,如果大家有兴趣,也可以在电脑上安装一些适合的软件,专门用于阴历转换。
公历转农历方法

初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。
然而目前记时通常用阳历日期表达,如欲将阳历日期换算成阴历日期可以用以下两种方法:其一是查《新编万年历》,如查1984年6月8日是阴历几日?翻开万年历6月10日是阴历十一,则逆推6月8日是阴历初九。
其二可以利用公式推算阴历日期:设:公元年数-1977(或1901)=4q+r则:阴历日期=14q+10.6(r+1)+年内日期序数-29.5n(注:式中q、r、n均为自然数,r<4)例:1994年5月7日的阴历日期为:1994-1977=17=4×4+1故:q=4,r=1 则:5月7日的阴历日期为:14×4+10.6(1+1)+(31+28+31+31+7)-29.5n=204.2- 29.5n然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日。
蔡勒(Zeller)公式:是一个计算星期的公式。
随便给一个日期,就能用这个公式推算出是星期几。
蔡勒公式如下:W = [ C/4 ] - 2C + y + [ y/4 ] + [ 13 * (M + 1) / 5] + d -1公式中的符号含义如下:W: 星期;w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六C: 世纪-1(前两位数)y: 年(后两位数)m: 月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)d: 日[ ]代表取整,即只要整数部分。
下面以中华人民共和国成立100周年纪念日那天(2049年10月1日)来计算是星期几,过程如下:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1=49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1=49+[12.25]+5-40+[28.6]=49+12+5-40+28=54 (除以7余5)即2049年10月1日(100周年国庆)是星期五。
公历农历转换方法

公历农历转换方法公历和农历是不同地区和文化中所采用的两种历法。
公历是以太阳历为基础,以地球绕太阳一周的时间为计量单位。
而农历则是以月相为基础,采用太阳和月球的运行周期来计算时间。
1.确定公历日期和年份。
首先,需要知道要进行转换的公历日期和年份。
公历日期包括月份、日期和年份。
2.确定公历年份是否为闰年。
公历闰年是指在二月份增加一天的年份。
闰年规则是,能被4整除但不能被100整除的年份是闰年,但能被400整除的年份也是闰年。
3.确定公历日期在一年中的天数。
需要计算从当年的一月一日到所给定日期的天数。
例如,5月1日在一年中的第121天。
4.确定农历年份。
农历年份按照十二属相的循环进行命名,例如鼠年、牛年等。
农历年份通常比公历年份小,所以需要找到所给定日期对应的农历年份。
5.确定农历闰月。
农历年份中的一些月份可能是闰月,即在正常的十二个月之外增加的一个月。
农历闰月的规则比较复杂,通常需要使用农历年历表格或专门的工具进行查询。
6.确定农历月份和日期。
一旦确定了农历年份和闰月,就可以根据公历日期和天数计算出农历日期。
需要根据农历每个月的天数和闰月的位置进行计算,这也可以通过参考农历年历表格来进行查询。
7.规范化农历日期。
农历日期通常以干支纪年的形式表达,需要将计算出的农历日期转换为常见的农历日期格式。
例如,将鼠年转换为1月1日。
这是一种简单的公历农历转换方法,但对于一些复杂的日期,如涉及到闰月的情况,可能需要更高级的技巧和工具来进行精确的转换。
现在,让我们来看一些农历的特点和一些常用的公历农历转换工具。
农历是以月相为基础,一般由十二个或十三个月组成,每个月以朔望月(农历月初)为起点,到下一个朔望月为止。
由于地球绕太阳公转的周期和月球绕地球运行的周期不完全吻合,导致农历年份的长度不固定,平均约为354-355天,比公历年份的365天要短。
在中国,农历仍然广泛用于农民和传统节日的日期计算。
另外,一些东亚国家和社区(如日本、韩国和越南等)也保留了农历作为重要的时间参考。
公历转农历

公历转农历农历,又称阴历,是中国传统文化中使用的一种历法,它的特点是以月为单位,每月的天数不固定,且与公历不同,因此需要进行转换才能确定某一天是农历的哪一天。
农历的起源可以追溯到中国古代,其中最早被发现的农历纪年方法是按照地月十日记录,这种方法可以追溯到公元前2300年左右。
后来,中国古代的天文学家通过对月亮运行轨迹的观测和研究,将农历分为29或30天的十二个月,并规定农历每年的1月1日为新年。
农历的纪年方法与公历不同,农历没有像公历一样的固定的年月日,因此需要使用特定的算法来转换。
公历转农历的方法包括两种:一种是通过查找对应的农历日历表,找到对应的农历日期;另一种是通过计算来求出农历日期。
查找农历日历表的方法是最简单的,但是这种方法并不能满足所有的需求,因为农历日历表通常只能查询到2022年的农历日期。
如果要查询超过2022年的农历日期,就需要使用计算的方法。
计算农历日期的方法是根据农历的规律来计算,主要有以下几个步骤:1.首先计算公历某一天是公元元年的第几天,这个数值称为公历天数。
公元元年1月1日是公历的第一天,每经过一天,公历天数加1。
2.接下来,根据农历的规律,计算公历天数对应的农历年份。
农历每年的1月1日都是春节,因此可以通过计算春节的公历日期来确定农历年份。
3.计算农历月份。
农历每月的天数不固定,需要根据农历年份的特点来确定。
4.最后,计算农历日。
根据剩余的公历天数,即可得到农历日。
公历转农历是一个复杂的过程,需要综合考虑许多因素,因此有时候可能需要使用专业的软件来帮助计算。
不过,对于一般的日常使用,可以使用网上的在线工具或者手机应用程序来转换农历日期。
总的来说,公历转农历是一个复杂的过程,但是对于许多中国人来说,农历又是非常重要的一种历法,因此了解如何转换农历日期是很有必要的。
需要注意的是,农历与公历的转换并不是一成不变的,原因是农历是阳历的一个逼近,所以农历与阳历之间存在一定的时差。
一招教会你公历换算成农历,要不要试试看

一招教会你公历换算成农历,要不要试试看古代的历法是干支纪年,俗称农历或阴历,现在我们都统一采用公历的阿拉伯数字纪年。
因此,就存在着一个历法的换算问题。
当然,我们可以查历书就直接知道了,但是这个方法并不一定方便。
现在告诉大家一个简单的口诀,大家根据这个口诀,再进行简单的推算,就能很快地将公历的数字年,换算成阴历的干支年。
在干支纪年中,由于天干是十位,刚好是十进制,因此,每十年的相应位上,天干都是相同的,比如1980年、1970年、1960年的天干都是庚,而1981年、1971年、1961年的天干都是辛,以此类推,我们只要记住从1至10位的不同天干就行了,不必再做什么推算。
要推算的是地支,地支是十二位,不是十进制,比较麻烦。
但我们只要记住每个0位年的地支,还是可以方便的推算出每一年的地支。
我们现在暂从本世纪的1900年为始,1900年到现在已经86年了,我们所看到的病号大概都在这个范围以内,只有极少数的超过这个范围。
现在需要记忆一个0位年上的地支次第口诀,就是子戌申午辰寅。
1900年,它的地支是子,天干为庚,即庚子年,1910年,它的地支是戌,天干一样还是庚,即庚戌年,依次1920年为庚申年,1930年为庚午年,1940年为庚辰年,1950年为庚寅年。
寅以后,上述的口诀再重新开始,即1960年又为庚子年,1970年为庚戌年,1980年为庚申年,1990年为庚午年,以此类推,无有穷尽。
知道了每个0位年的地支,就可以从相近的两个0位年推出尾数为1、2、3、4、5、6、7、8、9这些年的地支。
我们任举一年,1954年的干支是什么?先定天干,我们已经知道0位数的天干是庚,那么,依次而推,1是辛、2是壬、3是癸、4是甲、5是乙、6是丙、7是丁、8是戊、9是己,所以54年的天干是甲。
由上述的口诀,我们已经知道,1950年的地支是寅。
那么,依次而推,1951年是卯、1952年是辰、1953年是巳、1954年是午。
一键转换,公历转农历只要一个公式,超简单

⼀键转换,公历转农历只要⼀个公式,超简单私信回复关键词【学⼀招】,⼀次性 Get 学⼀招合集!助你成为⾼效职场⼈!
分不清「公历」和「农历」的烦恼⽆处不在。
⽐如从⼩只过「公历」⽣⽇的⼩ E,⾝边有⼀⼤群只过「农历」⽣⽇的朋友。
每次⼩ E 都要翻
N 遍黄历,以确保不在错误的时间送上祝福。
还有过年放假,家⾥⼈总说「初三去⼤姨那⼉拜年,初四去⼤姑家」。
⼩E只能看着台历,从⼤
年三⼗数到正⽉初三。
再⽐如⼀直认为农历七⼣指的是 7 ⽉ 7 ⽇。
……
如果你也有类似的烦恼,那么今天要学的这⼀招,⼀定能帮上你——⽤ Excel 将公历转农历!
公历转农历只需要⼀个简单的公式:
=TEXT(A2,'[$-130000]yyyy-m-d')
其中,A2 表⽰要转化的公历⽇期;
yyyy-m-d 表⽰输⼊⽇期的格式;
[$-130000] 是表⽰公历转阴历的特殊参数。
操作⽅法:
❶先点选单元格,输⼊上述公式:
❷输⼊完公式后,只要按下【回车】键,再双击单元格右下⾓的「填充柄」,快速填充,对应
的农历⽇期就全部转换完成!
例如:今天是公历 2019/7/3,那么对应的农历⽇期就为 2019-6-1:
美中不⾜的是,该公式只适⽤于 Excel 2010 以上的版本,且⽆法计算出闰⽉。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c++中怎样将阳历转化成农历
已关闭20[ 标签:c++, 阳历, 农历 ] 小^鱼、2011-05-03 11:06
推荐答案
一、原理篇
1.公历转换农历的算法
公历(Gregorian Calendar)与农历(Chinese Lunar Calendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的。
比较常用并且比较简单的公历转换农历算法就是查表方法。
首先要保存公历农历的转换信息:以任何一年作为起点,把从这一年起若干年的农历信息保存起来(在我的C++类中,是从1900年作为起点的。
选择一个起始点的思想十分重要,在下面的干支纪法和二十四节气中也体现到了)。
回想一下,我们平时是怎样来转换公历农历的呢?是查阅历书,历书中有每一天的公历农历,直接一查就可以了。
那么我们可不可以也这样做呢?当然可以,但是这样做要收录每一天的信息,工作量就会很大,所以我们要简化这些信息。
如何简化呢?
要保存一年的信息,其实只要两个信息就可以了:(1)农历每个月的大小;(2)今年是否有闰月,闰几月以及闰月的大小。
用一个整数来保存这些信息就足够了。
具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉了12位,再用低四位来表示闰月的月份,没有闰月记为0。
比如说,2000年的信息数据是0x0c960,转化成二进制就是1100100101100000,表示的含义是1、2、5、8、10、11月大,其余月小,低四位为0说明没有闰月。
2001年的农历信息数据是0x0d954,其中的4表示该年闰4月,月份大小信息就是0x0d95,具体的就是1、2、4、5、8、10、12月大,其余月小。
这样就可以用一个数组来保存这些信息。
在我的C++类中是用m_lunarInfo这个数组来保存这些信息的。
下面就是公历转换成农历的具体算法:
(1)计算所求时间到起始年正月初一的天数。
(2)从起始年份开始,减去每一月的天数,一直到剩余天数没有下一个月多为止。
此时,m_lunarInfo的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月。
如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月月份数后面一个月,则这个月就是闰月。
剩余的天数就是农历日。
(具体实现时有所改进。
)
2.利于泰勒公式巧算星期
在应用数学中有一个计算某一天是星期几的公式,这就是泰勒公式。
公式如下:
w = [c÷4] - 2c + y + [y÷4] + [26(m+1)÷10] + d - 1,其中w就是所求日期的星期数。
如果求得的数大于(小于)7,就减去(加上)7的倍数,直到余数小于7为止。
式子中c是指公
元年份的前两位数字,y是后两位数字,m是月数,d是日数。
方括弧[]表示对于括号中的数字取整。
还有一个特别要注意的地方:所求的月份如果是1月或2月,则应视为上一年的13月或14月,也就是公式中m的取值范围是从3到14而不是从1到12。
3.干支纪法
天干有十个,就是甲、乙、丙、丁、戊、己、庚、辛、壬、癸,地支有十二个,依次是子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。
古人把它们按照一定的顺序而不重复地搭配起来,从甲子到癸亥共六十对,叫做六十甲子。
我国古人用这六十对干支来表示年、
得到年、月、日的干支表示原理是相同的,即所求的年、月、日到起始年、月、日所经历的年数、月数、天数,加上起始年、月、日干支表示在上表中的序号,与10取模得到天干的序号,与12取模得到地支的序号。
以年为例,1900年立春后为庚子年,查上表可知,庚子年为六十甲子的第36位,所以所求年份m_year到1900年的年数为m_year-1900+36-1(如果月份m_month小于等于2月)或m_year-1900+36(如果月份m_month大于2月)。
同理,可以得到月、日的干支表示。
最后,还要依据节气(立春)调整二月份的干支纪年;依据每月的第一个节气的日期调整月的干支表示,具体情况源程序中有详细的说明。
古人根据太阳升起的时间,将一昼夜区分为十二个时辰,用十二地支为代号。
如果用m_hour表示公历现在的小时数(二十四表示法),则(m_hour+1)/2就得到时间的地支表示(其实是地支的序号)。
4.二十四节气
节气就实质而言是属于阳历范畴,从天文学意义来讲,二十四节气是根据地球绕太阳运行的轨道(黄道)360度,以春分点为0点,分为二十四等分点,两等分点相隔15度,每个等分点设有专名,含有气候变化、物候特点、农作物生长情况等意义。
二十四节气即立春、雨水、惊蜇、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒。
以上依次顺属,逢单的均为"节气",通常简称为"节",逢双的则为"中气",简称为"气",合称为"节气"。
现在一般统称
为二十四节气。
自古节气的推算是由一年平分24等分所得的平节气。
旧历用平气法推算二十四气,此法将一回归年均分成二十四等分,从冬至开始等间隔地依次相间安排各个节气及中气,而各气之间太阳所运行的度数因此并不相等。
新历推算则用定气法,此法将黄道上的周天度数等分成二十四份,太阳移至某一分点时,即定为某一节气的日期,由于太阳的视运动迟速不均,因此各节气间相隔的时间亦不等。
但不论新历或旧历,均取冬至为二十四气之首,故在春、秋分时彼此的差别最大。
为何中国传统历家早知推算定气,却又习用平气注历?此主要或由于平气易于计算所致,因在此法之下,各节气与节气间或中气与中气间相隔固定为三十日五时辰又二刻。
本C++类中实现二十四节气的计算,使用的是平节气的简单算法。
用数组sTermInfo
记录从小寒开始的各个节气相对于小寒所经历的分钟数,并用int sTerm(int y, int n)函数得到某年y的第n个节气为所在月的第几日(n从0小寒起算)。
由于没有考虑岁差与章动,所以精确度不是很高。