搜档网
当前位置:搜档网 › 农历推算阳历的计算方法

农历推算阳历的计算方法

农历推算阳历的计算方法
农历推算阳历的计算方法

因为阳历阴历各自有自己的运行规律,虽然同样是纪年,但是互相之间没有牵制,所以,虽然能够计算,但并没有一个固定公式。所以,往往借助万年历,来比对它们的相对日期。

万年历是一种将公历、农历、干支历相互对应,编排在一起的历学工具书。查用万年历,主要是使用年历中的干支纪时。

干支纪时是我国独创的历史最悠久的历法。它以天象为依据,符合物候特点,体现了五行旺衰。在诸多学科中,有着其它历法不可替代的作用。干支纪时,在中医、气功、周易数术、农作、历法等领域中:有着特殊的实用价值。每当需用干支纪时,而需用者手中没有万年历的时候,往往束手无策。

,只需记住十四字的歌诀,一年中的干支纪时就可迅速算出。这种快速心算万年历的方法,叫“银盘子”,“银盘子”是民间术士创造的万年历速算法,历史悠久,以往采用师徒间口授方法传授,严禁外传,我们在此将“银盘子”合盘端出,公诸於世,以进一步探讨揭秘。

“银盘子”是以农历为基础,推算干支纪时的方法。

农历有大月、小月之分,大月30天,小月29天。如果不考虑小月因素,农历两个月60天,与一个甲子六十组干支数目相符,即每两个月可重合一个甲子。按照这样一个规律,知道了某年的正月初一的日干支,就等于知道了三月初一,五月初一,七月初一,九月初一,十一月初一的日干支,这几个月的初一的日干支,应是相同的(有闰月者,月分稍有变化)因为农历中存在小月,只

要知道某年有几个小月,其分别为哪几个月,所推日期经历了几个小月,干支纪日顺延几天就是了,这样心算干支纪日就变得十分简单了。心算万年历,必须了解以下四个要点:。 (1)该年岁次;(2)正月初一的日干支;(3)立春的日、时;(4)当年几个小月,分别为哪几个月。“银盘子”仅用了十四个字的歌诀,便将以上四个问题圆满地解决了。“银盘子”的创造者,为了保守秘密,在编制口诀时,采用了“加密术”,即对同一地支,往往采用多种称谓。这样做,一是提供了多一些的音韵,使编出的歌诀押韵。而更主要的是为这种心算法采取了“加密”。同一地支众多称谓,变换使用,即便外人听到也不得其解。

“银盘子”不但对地支称谓进行了加密处理,为了便于记忆,控制歌诀字数,还设置了一些相关月份的简称。月时,可称“金蝉”。另外遇到闰月,分别以前、后、双表示。如后五,指闰五月,前三,指前三月,双七指前、后两个七月。

发现节气与农历月之间,有一定规律可以进行修正,只要加上相应的修正值,从立春节即可推算全年任何一个节气的交节日期。大部分节气不差一个时辰。个别节气在推算中会有几个时辰的误差,但用心算法达到这样的精度,已经完全可以满足实用要求了。古人曾规定了一个修正数,不甚精确,笔者经过慎密演算,重新确定了修正值,歌诀是:

立春时刻起根源,

惊蛰倒退时辰三,

要知清明三月节,

不用加减做龙坛。

加八时辰是立夏,

二日退一芒种天,

三日四时为小暑,

五天秋到衣食干。

五日十时交白露,

六日五时寒露天,

六日七时立冬节,

六日四时大雪连。

五日九时交小寒,

推算不会差半天。

以上是从立春节时间起计算不同节气,需要加上有不同时间修正值。了解了由立春起,推算十二节气时修正值,再根据“银盘于”歌,即可算出一年中的任何一个节气的交节时间,知道了交节时间,就能确定干支纪月的起始。

试以1957年为例,推算立冬时间,确定干支纪月。

“银盘子”歌诀曰:“丁酉癸卯初五蛇,木局后刀四申丑上查”。“银盘子”所表达的意思为:1957年岁次丁酉,正月初一的日干支是癸卯,正月初五巳时立春。十月、二月、六月、闰八月、四月、七月、腊月为小月,该年闰八月。

立冬节为十月节,因该年闰八月,所以立冬节在阴历九月中,该年正月初五立春,设九个月后的初五(即九月初五)立冬。立冬前经历了五个小月(小月29日,干支月约30日),先补上五日,再

加上修正值六日七个时辰,即为立冬时间。

立冬日期为:九月初五巳时+(五日) +(六日七个时辰)=九月十七日子。

根据“五虎遁”规定,干支月为辛亥月。再以1938年为例,推算芒种节时间,确定干支纪月。

“银盘于”歌诀曰:“戊寅癸亥初五戌,印酉龙羊闰前七”。

“银盘子”所表达的意思为:1938年岁,次戊寅,正月初一日干支为癸亥,该年正月初五戌时立春。该年四月、八月、三月、六月、前七月、十一月为小月,是年闰七月。

芒种节为五月节。芒种经历了三月、四月两个小月,修正值为二日退一时辰。正月初五立春,设五月初五为芒种节。芒种节交节时间为:五月初五戌时+(两日)+(两日-1时辰)=五月初九酉时。根据“五虎遁”规定:干支月为戊午月。

“银盘子”是中国先人在社会实践中创造出来的心算万年历法。只要将六十甲子热练掌握,用心记住十四个字,即可推算出一年之历法。记住数百个字(几十个歌诀)就可推算数十年的历法.可以说学会此法,即胸有历书,很有实用价值。现在我们大力提倡学术交流’,不搞门户之见,完全可以去掉“银盘子”的加密做法,重新编制歌诀,使之更简明、易记,让更多的人掌握心算万年历法,使这种隐匿在民间的秘术服务于社会。

阳历转化成农历法

阳历转化成农历法

————————————————————————————————作者:————————————————————————————————日期:

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是指公

农历历算和编历规则2014版

农历历算和编历规则(2014版) 农历又被称为夏历、阴历、旧历、中历、华历,我国已经用了几千年,是东亚传统历法之一。农历属于一种阴阳历,平均历月等于一个朔望月,设置闰月使平均历年为一个回归年,设置二十四节气以反映季节,所以又有阳历的成分。至今几乎全世界所有华人及朝鲜、韩国和越南及早期的日本等国家,仍使用农历来推算传统节日如春节、中秋节等节日。 农历还使用干支纪年,因此就每60年重复六十甲子。如公元1991年称为辛未年,公元2051年也为辛未年。从汉武帝时期开始,皇帝年号与干支同时使用,以避免重复。如清同治三年、甲子年。农历还使用干支纪日。古代史书上不记月之几日,而记月之干支日,读古代史书就必须查明该月朔日的干支,再按干支纪日法顺推是月之第几日。 中国历朝颁布的历书,历理均大同小异。编历规则不变、改革的是推算方法。史上推算农历方法有几十种之多,还好各时期的史书都有收录中国历朝颁行历书的推算方法;史书有收录我在编写《电脑医生万年历》和《福星万年历》(简称程序、下同)时才能还原史实农历。程序在网上发布后得到广大网友的支持,同时也有网友来信或来电询问古今农历推算方面的问题。现在我专门把这些常见问题知识写出来。以飨网友。 程序选用还原的颁行历及使用年限 一、农历(又称:夏历、旧历、中历、华历) 1、农历历算和编历常用术语 黄经:是在黄道座标系统中用来确定天体在天球上位置的座标值、共分成360度、在这个系统天球被黄道平面分割为南北两个半球,太阳移到黄经0度为春分、移到黄经90度为夏至、移到180度为秋分、移到270度时为冬至。 朔日:月球移到地球和太阳中间时的那一天叫朔日。 平朔:用朔望月的平均长度计算、没考虑日月运行的不均等性;缺点:―含有真正的―朔‖的当天有时可能会出现在前一月的最后一日(―晦日‖、廿九日或卅日),有时会出现在初二‖。 定朔:计算考虑了日月运行的不均等性,将含有真正―朔‖的当天作为每月的开始。 平气:计算不考虑太阳在黄道上运动快慢不匀,平气两个节气之间的天数15.22天。 定气:计算考虑太阳在黄道上运动快慢不匀,定气两个节气之间的天数不一样、短的只有14天、长的达16天。 冬至日:冬至交接时间所在的那一天就叫冬至日。 冬至日必须在子月:冬至日当天或冬至日前的那个朔日定为子月初一―起点‖(注意:起点和算命不同)。 建正:年首月份,所说的建正就是―夏正:夏历正月建寅[子月为11月];殷正:殷历正月建丑[子月为12月]、鲁历同殷历;周正:周历(周朝历)正月建子[子月为正月];秦正:秦历《颛顼历》正月建亥[子月为2月]‖。 置闰:农历1个月就是1个朔望月、月的平均天数≈29.53059天,农历一年12个月≈354.367天;但是1回归年≈365.2422天,这样农历一年比回归年少≈10.866天,农历≈ 2.71771年就比回归年少1个月,如不调整过不了几十年就会出现冬、夏倒置。为了让农历年平均天数等于回归年农历≈2.71771年必须设一个闰月。置闰规则请看《历代农历编历规则》。 2、历代农历编历规则: 节气:一年分二十四个节气,清朝(公元1644年)以前用平气计算,清朝(公元1644年)以后用定气计算。 月策规则:朔日为每月起点(初一日);朔日(月初一日)到下个朔日(下月初一日)有多少天、这月就有多少天。有30天为大月、有29天为小月;唐朝(公元619年)以前用的是平朔、唐朝(公元619年)以后用的是定朔。

公历和农历之间如何转换

公历和农历之间如何转换? 很多人都一直在找换阴阳历的公式。我也尝试过。曾读过「高平子」天文前辈所着「学历散论」了解古历的变更和阴阳历的缺陷。才知道由於月球转动的不稳定不规则,确定无公式可寻。这也是古代中国每百年必改历的原因。 阴历最大的问题是在如何置闰。好像不难,因为阴历基本法则如下: * 月朔日即是初一 * 月以中气得名 * 以包含雨水中气月为正月,即是「寅」月 * 月无中气者为闰月,以前月同名 如果,日月转动循还有规则的话,推演一套阴阳历转换的公式并不难。问题在有时一个太阴月比一个太阳月还要长。如此一个太阴月就有可能包括两个中气。此双中气月後的阴历月名就全部乱掉了,直到下一个「假」闰月後才调整过来。 一般人接触到的阴阳历是民用历法,它是政府颁令的以东经120度计算的历法或称中原标准时间或北京时。如果,我们用不同时区、不同经度为子午线来重新计算阴阳历,民用历法的置闰法则出了很大的问题。不同时区的闰月可能落在不同月。换言之,在一百年内,任何两个时区的闰月顺序模式是会不相同的。 高平子前辈书中提到了「历理置闰法」。如果应用历理置闰法到不同时区,则所有不同时区的闰月都落在相同月。如此不同时区、不同经度的阴

阳历置闰之问题就消失了。民用置闰和历理置闰的不同是: * 在民用置闰,如果月朔日和中气同一天,则该阴历月包含那个中气。 * 在历理置闰,如果月朔日和中气同一天,月朔日时间必须在中气时间之前,则该阴历月才包含那个中气。 简言之,民用置闰比较月朔和中气日期;历理置闰比较月朔和中气日期、时、分、秒。由此可知,没有精确的太阳和月亮的时间数字,阴历的闰月可能会排错了。 基於这些理由,我着手寻找天文公式计算精确的太阳和月亮在纬度的时间。当年没有网路,发了大半年於美国南加州各大图书馆及大学,找寻答案。1993年出版了「中美天文万年历」一书。书中精确的天文日月时间只从1900到2010年。因恐2011後时间误差超过一分钟,不够精确,不敢印出。今年2002从网路资讯,确定太阳和月亮时间的精确度後,百忙中重新整理资料,提供给需要阴阳历转换公式的朋友。 整理出的太阳和月亮时间数字是从西元1年到2246年。有历理和中国民用两套历法。数字内容清清楚楚的看出民用历法的敝端。例如,从西元1600年到2246年,民用历法双中气的阴历月有22个,历理历法只有5个。民用历法甚至在2033、2128和2242年中,三个月之间居然跑出两个双中气;换言之,三个月中多出两个「假」闰月。前後12个阴历月中有三个闰月,闰月的去留造成许多学者的讨论和困恼。历理历法在此三年中,却没有发现到双中气阴历月。闰月的去留只要把双中气月後的「假」闰月取消,则历理历法近乎於完美。 由此可知,民用历法问题很大,应该废除。上次阴阳历重大改历在1645

公历和农历转换算法详解

公历和农历转换算法详解 //C51写的公历转农历和星期 #define uchar unsigned char #define uint unsigned int #include /* 公历年对应的农历数据,每年三字节, 格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小 月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天) 第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期 */ code uchar year_code[597] = { 0x04,0xAe,0x53, //1901 0 0x0A,0x57,0x48, //1902 3 0x55,0x26,0xBd, //1903 6 0x0d,0x26,0x50, //1904 9 0x0d,0x95,0x44, //1905 12 0x46,0xAA,0xB9, //1906 15 0x05,0x6A,0x4d, //1907 18 0x09,0xAd,0x42, //1908 21 0x24,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //1924 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x24,0x97,0xB7, //1928

农历运算

一年中哪个月大,哪个月小,年年不同,由计算决定。 一般的,在19年里中设置7个闰月,有闰月的年份全年383天或384天。 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的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月。如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月月份数后面一个月,则这个月就是闰月。剩余的天数就是农历日。(具体实现时有所改进。)

公历转农历EXCEL宏讲解

Public Function NongLi(Optional XX_DATE As Date) Dim MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12) Dim curTime, curYear, curMonth, curDay Dim GongliStr, NongliStr, NongliDayStr Dim i, m, n, k, isEnd, bit, TheDate '??è?μ±?°?μí3ê±?? curTime = XX_DATE 'ìì?é??3? TianGan(0) = "?×" TianGan(1) = "òò" TianGan(2) = "±?" TianGan(3) = "??" TianGan(4) = "?ì" TianGan(5) = "?o" TianGan(6) = "?y" TianGan(7) = "Dá" TianGan(8) = "èé" TianGan(9) = "1?" 'μ??§??3? DiZhi(0) = "×ó" DiZhi(1) = "3ó" DiZhi(2) = "òú" DiZhi(3) = "??" DiZhi(4) = "3?" DiZhi(5) = "?è" DiZhi(6) = "??" DiZhi(7) = "?′" DiZhi(8) = "éê" DiZhi(9) = "ó?" DiZhi(10) = "D?" DiZhi(11) = "o¥" 'ê??à??3? ShuXiang(0) = "êó" ShuXiang(1) = "?£" ShuXiang(2) = "?¢" ShuXiang(3) = "í?" ShuXiang(4) = "áú" ShuXiang(5) = "é?" ShuXiang(6) = "?í"

农历大小月的算法

农历每月的大小确定方法 农历年各年的每个月的天数是不固定的,月大每月30天,月小每个月29天,要是遇到闰年的话,还得多出一个月,这个多出来的月也是有大小之分的,那么农历每个月有多少天是怎么确定的呢?有个简单的方法:要知道某年开始数起的第九年各月的天数(各月的大小),我们可以查询今年各月初一那天的干支(天干地支),按照“大月天干进四,地支进八;小月天干进三,地支进七”的方法即可推算出某年开始数起的第九年各月初一那一天的干支,然后再计算每月的后面那个月初一那天的干支编号与该月的初一那天的干支编号之差的绝对值,如果此值大月30则计算结果应为60减去此值的差。 例如:如果我们想知道农历2012年各月的大小。我们先从2004年的历书中查到各月初一那天的干支及其大小:正月小,庚子;二月大,己巳;闰二月小,己亥;三月大,戊辰;四月大,戊戌;五月小,戊辰;六月大,丁酉;七月小,丁卯;八月大,丙申;九月小,丙寅;十月大,己未;冬月小,乙丑;腊月大,甲午。那么按照下图所示的编号再结合即可立即推算出2012年各月初一那天的干支(注意:如果推算出的天干编号超过10,则使用算出的编号数减去10;如果推算出的地支编号超过12,则计算结果应为算出的编号减去12)分别为:第一月,癸未;第二月,癸丑;第三月,壬午;第四月,壬子;第五月,壬午;第六月,辛亥;第七月,辛巳;第八月,庚戌;第九月,庚辰;第十月,己酉;第十一月,癸卯;第十二月,戊申;第十三月,戊寅。呵呵,赶紧查下2012年的历书是不是有十三个月并且从正月到腊月每月的初一日的干支都与推算出的完全相符呢? 天干编号表 地址编号表

这样再从60甲子表(把60甲子按顺序从甲子为1开始编号)中查出推算出的每月初一日的干支即可算出每月的天数,从而确定每个月的大小了:根据查表并计算得知2012各月的天数分别为:|(50-20)|=30;60-|(50-19)|=29; |(49-19)|=30;|(19-49)|=30;|(48-19)|=29等,不过这样只能算出12个月的天数,最后一个月的天数还要根据相同的方法推算出2013年正月初一的干支,才能确定。 干支编号表

阴历阳历转换计算公式

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日。 3.计算结果的订正 实际上上列公历换算为农历时常有较大的误差,如熙宁三年四月初一日为公历1070年5月13日,而不是5月19日。通过中国历法所用的于支记日法求算所用两历的干支,对所 求结果加以订正。 如,马依泽公生于回历310年3月20日,自回历历元起算共历日数为: 自回历元旦至其3月20日,共历79日。 自回历元年元旦至309年元旦,共历113个闰年196个平年。又回历历元在公历622年7月16日,已知该日的干支序数为50,癸丑日,减1(因自甲子起算),余49应加入下列算式中, (309 ×354+113+79+49)÷60=1827.116667

中国日历(公历+农历)算法

中国公历算法 中国公历算法不是太难,关键是星期值的确定。这里给出了简单算法: public static int dayOfWeek(int y, int m, int d) { int w = 1; // 公历一年一月一日是星期一,所以起始值为星期日 y = (y-1)%400 + 1; // 公历星期值分部 400 年循环一次 int ly = (y-1)/4; // 闰年次数 ly = ly - (y-1)/100; ly = ly + (y-1)/400; int ry = y - 1 - ly; // 常年次数 w = w + ry; // 常年星期值增一 w = w + 2*ly; // 闰年星期值增二 w = w + dayOfYear(y,m,d); w = (w-1)%7 + 1; return w; } 中国农历算法 根公历相比,中国农历的算法相当复杂。我在网上找的算法之中,https://www.sodocs.net/doc/ba9254287.html, 的算法是最好的一个。这个算法使用了大量的数据来确定农历月份和节气的分部,它仅实用于公历 1901 年到 2100 年之间的 200 年。

中国农历计算程式 跟据 https://www.sodocs.net/doc/ba9254287.html, 提供的算法,我写了下面这个程式: [HTML] /** * ChineseCalendarGB.java * Copyright (c) 1997-2002 by Dr. Herong Yang. https://www.sodocs.net/doc/ba9254287.html,/ * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年*/ import java.text.*; import java.util.*; class ChineseCalendarGB { private int gregorianYear; private int gregorianMonth; private int gregorianDate; private boolean isGregorianLeap; private int dayOfYear; private int dayOfWeek; // 周日一星期的第一天 private int chineseYear; private int chineseMonth; // 负数表示闰月 private int chineseDate; private int sectionalTerm; private int principleTerm; private static char[] daysInGregorianMonth =

excel公历转农历的四种方法

excel公历转农历的四种方法 excel公历转农历方法一:使用text函数 A列是公历日期,我们在B1单元格输入公式:=TEXT(A1,"[$-130000]yyyy年m月"&I F(LEN(--TEXT(A1,"[$-130000]dd"))=1,"初","")&"d"),下拉完成公历转农历。 excel公历转农历方法二:使用text+MID函数 A列仍然是公历,B1输入公式:=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A1,"[$-13 0000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉戌亥",MOD(TEXT(A1,"[$-130000]e")-4, 12)+1,1)&"年"&TEXT(A1,"[$-130000][DBNum1]m月d日"即可。 excel公历转农历方法三:使用text+MID+ CHOOSE+ YEAR函数 A1为公历,B1输入:=CHOOSE(MOD(YEAR(A1)-1900,10)+1,"庚","辛","壬","癸","甲", "乙","丙","丁","戊","己")&CHOOSE(MOD(YEAR(A1)-1900,12)+1,"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥")&TEXT(A1,"[dbnum1][$-130000]年m月"&IF(--TEXT(A1, "[$-130000]d")<11,"初","")&TEXT(A1,"[dbnum1][$-130000]d")) excel公历转农历方法四:使用自定义函数 上面介绍的excel公历转农历都是使用excel内置函数完成的,有一个弊端就是公式太长,如果使用自定义函数,在公式栏就可以简化输入。 如下图所示,我们在B2输入公式:=nongli(A2),即可。C列农历简称中C2公式是:=RIGHT(B2,LEN(B2)-8)。

拳头辨别月份大小

课程解读 一、学习目标: 1. 认识时间单位年、月、日,了解它们之间的关系;知道平年、闰年等方面的知识;记住每个月以及平年、闰年各有多少天。 2. 建立年、月、日等时间观念,培养观察、分析和判断推理的能力。 二、重点、难点: 重点:认识时间单位年、月、日,掌握它们之间的相互关系。 难点:计算一年内有多少日。发现并掌握平、闰年的判断方法。 三、考点分析: 1. 认识时间单位年、月、日,了解它们之间的关系; 2. 运用年、月、日之间的关系进行计算。 知识梳理 1. 平年365天,闰年366天,每连续四年中有三个平年,一个闰年。 2. 能被4整除的年份是闰年,反之是平年,末尾有两个或两个以上的0,要先去掉两个0,再除以4,能被4整除的就是闰年,不能被4整除的则是平年。 3. 每年12个月,1、3、5、7、8、10、12月每月31天,是大月;4、6、9、11月每月30天,是小月。2月平年28天,闰年29天。 介绍用拳头记忆大月、小月的方法:举起左手拳头,背向自己,数月份。凸的是大月,凹的是小月。注意八月份要从数一月份的地方数起。 口诀:一、三、五、七、八、十、腊、三十一天永不差。 1年 12个月: 31天:一、三、五、七、八、十、十二大月(7个)

30天:四、六、九、十一小月(4个) 28天、29天:二月特殊月 典型例题 方法应用题: 例1. 2011年3月10日,有一个罪犯逃到了深圳。他拿着一张签发日期是2011年2月29日的边境通行证,在深圳海关准备过境。尽管他经过整容,变了模样,可还是被检查证件的武警一眼识破,将他扣留。同学们知道这是什么原因吗? 思路分析: 1)题意分析:本题查查同学们平年、闰年的知识。 2)解题思路:判断出2011年是平年而非闰年,平年的2月只有28天。 解答过程:2011不能被4整除,因而我们判断2011年是平年。所以2011年的2月根本就没有29日这一天,故该边境通行证是伪造的。 解题后的思考:重点记忆通过计算的方式区分平年、闰年。知道平年、闰年的根本区别在于2月的天数。 例2.下列年份中,哪些是平年,哪些是闰年? 1605 1840 1902 1944 1955 2100 1976 1987 1994 2400 思路分析: 1)题意分析:本题考查通过计算的方式区分平年、闰年 2)解题思路:用以上年份分别除以4,能够被4整除的是闰年,反之是平年;如果年份的末尾有两个或两个以上的零,先去掉两个零,再除以4。 解答过程: 1605不能被4整除,所以1605年是平年; 1840 ÷4=460,1840能够被4整除,所以1840年是闰年; 1902不能被4整除,所以1902年是平年; 1944÷4=486,1944能够被4整除,所以1944年是闰年; 1955不能被4整除,所以1955年是平年; 2100先去掉两个0,是21,21不能被4整除,所以2100年是平年; 1976÷4=494,1976能够被4整除,所以1976年是闰年; 1987不能被4整除,所以1987年是平年; 1994不能被4整除,所以1994年是平年; 2400先去掉两个0,是24,24÷4=6,24能够被4整除,所以2400年是闰年。 解题后的思考:最重要的是同学们要注意末尾有两个或两个以上的0的年份,要先去掉两个0,再除以4,能够被4整除的就是闰年,不能被4整除的则是平年。 例3.填空。 (1)8月1日的前一天是()月()日。 (2)6月30日的后一天是()月()日。 (3)一年中小星在外婆家连续住了62天,正好是两个月,这两个月是()月和()月。

年月日时干支的推算

____年__月__日时干支的推算 天干: 甲乙丙丁戊己庚xx壬癸 地支: 子丑寅卯辰巳午未申酉戌亥 一、年干支的推算方法 推算年干支的简单方法是: 天干: 取当年的公元数减三,得出的余数值除以10,取余数 地支: 取当年的公元数减三,得出的余数值除以12,取余数 例如2009年: (2009-3)/10余数为:6,天干为:己(2009-3)/12余数为:2,地支为:丑故2009年的干支为: 己丑年 二、月干支的推算 地支: 十二地支对应十二个月,每年1月都是【寅】,2月是【卯】,依次类推天干: 记住下面的算式即可: 1(甲)2(乙)3(丙)4(丁)5(戊)

6(己)7(庚)8(辛)9(壬)10(癸) ______________________ 3(丙)5(戊)7(庚)9(壬)1(甲) 这个简单的数式意思是说: 1(甲)与6(己)年的1月天干为3(丙),其正月干支是丙寅;2(乙)与7(庚)年的1月天干为5(戊),其正月干支是戊寅;3(丙)与8(辛)年的1月天干为7(庚),其正月干支是庚寅;4(丁)与9(壬)年的1月天干为9(壬),其正月干支是壬寅;5(戊)与10(癸)年的1月天干为1(甲),其正月干支是甲寅;例如:2009年是己丑年,正月干支是: 丙寅,其他各月依次类推,例如: 六月的干支就是xx 三、日干支推算方法 1.元旦干支 2009丙午 2010辛亥 2011丙辰 2012xx 2013丁卯 2014壬申 2015xx

2016壬午 2017戊子 2018癸巳 2019戊戌2.各月干支加减数 歌诀: 一、五(月)双减一, 二、六(月)加零六, 三(月)减二、加十, 四(月)减一、xx, 七(月)零、九(月)xx, 八(月)上加一、七, 十(月)上加二、八, 冬(月)三、腊(月)三、九, 闰年三月起,余数均加一。 求日干: (元旦天干数)+(日期)+(各月天干加减数,闰年3月以后加1)/10=商...余数 求日干: (元旦地支数)+(日期)+(各月地支加减数,闰年3月以后加1)/12=商...余数 例如2009年的元旦干支为:

阳历和阴历的闰年是怎么算出来的

阳历和阴历的闰年是怎么算出来的? 阴历全称“太阴历”或“纯阴历”。阴历根据月亮圆缺变化的周期,即朔望月制定的,因古人称月亮为“太阴”,所以称为“太阴历”,简称“阴历”。阴历产生的确切日期已难确定,但根据甲骨文中的一页甲骨历来判断,阴历大约在殷代已相当普及。 阴历的主要特点是:历月的长短依据天象即月相来确定,大月30日,小月29日,历月的平均值大致与朔望月平均长度29。5306日相等。年的长短则只是历月的整数倍,而与回归年无关。因此,阴历的月份也与四季寒暑无关。阴历的日期表示着一定的月相,即初一是朔,即新月;十五、十六或十七是满月,即望;初七、初八是上弦月;二十二、二十三是下弦月等,这对古人凭借月相判断日期是很方便的。而月相的变化又是人们最容易看见的天象,因此,各国的历法大都先有阴历后有阳历。但是,由于阴历与回归年无关,因此,就与农业生产和人们的日常生活不协调,后来便逐渐被淘汰。现今除了几个伊斯兰教国家,因宗教上的原因仍然使用一种称为“回历”的阴历以外,其他国家已经废弃不用。 1912年我国采用“公历”安排月日后,人们就把公历称为““阳历”,而把同时并存于民间的传统的“夏历”通俗地称之为“阴历”。 1、阳历的来历阳历即太阳历,也就是公历,它是国际通用的。我国自民国元年起采用阳历,为与我国旧有之历相对称,阳历又称“新历”。阳历以地球绕太阳转一圈的时间定为一年。共365天5小时48分46妙。平年只计365天这个整数,不计尾数。阳历每年分12个月,大月31天,小月30天,2月只有28天。又规定7月以前,单月为大月,双月为小月;8月以后,双月为大月,而单月为小月。每年所余的5小时48分46秒,只至四年约满一天,这一天就加在第四年的2月里,这一年叫闰年,所以闰年的2月有29天。 2、阳历闰年的确定一般来说,用4去除阳历的年份,能除尽的就是闰年,像1984、1988年等都是闰年。但是,因为阳历一年的确切天数应该是365天5小时48分46秒,比平年365天多出5小时48分46妙,四年一共多出23小时15分4秒。如果每四年一闰加一天的话,又多了44分56少,四百年差不多就会多加出3天来,所以,每四百年得扣去3天才行。故又订了一条补充规定:每逢阳历年份是整百的那一年,比如公元1800、1900、2000年等,能被400整除,所以不是闰年。但公元2000元又是闰年,因它的2月有29天。 3、阴历的来历阴历以月亮圆缺一次的时间为一个月,共29天半。为了算起来方便,大月定做30天,小月29天,一年12月中,大小月大体上交替排列。阴历一年有365天左右,也没有平年闰年的差别。阴历不考虑地球绕太阳的运行,因而使得四季的变化在阴历上就没有固定的时间,它不能反映季节,这是一个很大的缺点。为了克服这个缺点,后来人们定了一个新历法,就是所谓阴阳台历。现在我国还在使用的夏历(也叫农历或阴历)就是这种阴阳合历。它跟阴历一样,以月亮圆缺一次的时间定做一个月,也就是大月30天,小月29天,可是它又用加闰月的办法,使得平均每年的天数跟阳历全年的天数相接近,来调整四季。阴历约每过二三年多有一个闰月。 4、阴历闰月的确定至于阴历哪一个月,这就牵涉到了节气了。说一年有二十四节气,只是一种传统的说法,往细方面说,应该说一年有十二个节气和十二个中气。这十二个中气,哪个中气属于哪个月,是有规定的:雨水是正月的中气;春分是二月的中气;谷雨是三月的中气;小满是四月的中气;夏至是五月的中气;大暑是六月的中气;处暑是七月的中气;秋分是八月的中气;霜降是九月的中气;小雪是十月的中气;冬至是十一月的中气;大寒是十二月的中气。至于十十个节气在哪几个月里,那就不一定。又阴历的一个月平均是29天半多一点,可可是从一个中气到下一个中气的间隔却平均是30天半少一点。这样中气在阴历的月份里要逐月推迟1天光景,到一定的时间,中气就不在月中而移到了一个月的末尾,如果挨着的第二个月又是小月,很可能这个月就没有中气,因为下一个中气移到第三个月的月初去了。中间的这个没有中气的月份,就算是上个月的闰月。举个1998年的例子:阳历6月

回历、公历、农历的换算

回历、公历、农历的换算 2002-2-10 22:02:19 马肇曾阅读9061次 研究世界伊斯兰教历史,免不了要对以回历所记载的历史事实换算为公历,或将所载的公历换算为回历。《回历纲要》、《历法丛谈》、《万年历谱》以及《回回天文学史研究》[1--4]等专著都载有自回历换算为公历的算式,并称两历因闰年的时间不同,故换算结果常有一日之差,惟均未讨论一日之差的简易订正方法。1998年《北京大学学报》(自然科学版)载文讨论了中国农历与公历、回历的换算问题[5]。惟笔者依上列著作中所列算式推算结果;发现与实际所载日期误差常大于一日,最高可达十日之多。因此有必要对计算中误差的来源及计算公式的改进进行探讨,特撰此文。 二、国历换算为公历 1.换算公式的导出 公历每年365.242 199074075 日(简化为365.2422日),而回历每年为354.367074375日(简化为354.36707日),所以回历一年只相当354.36707/365.2422=0.970223或0.970224个公历年。又回历元年元旦定在公元622年7月16日,由于当时历法在推算上的误差,致当时的7月16日,按现代的公历应改为7月19日,自公元某年元旦至该年7月19日已达200日.相200/365.2422=0.5476公历年;又因到回历二年元旦才达到0.970224个公历年,故自回历纪年元旦换算为公历的算式即为: (回历纪年一1)× 0.970224+622.5476年 =所求公历年月日 (1) 或回历纪年× 0.970224+621.5774年 =所求公历年月日 (2) 式中621.5774来自622.5476-0.970224。 如所求某一历史事实不在回历元旦时,可将事实经过本年的总日数化为回历年,加人回历纪年总数中即可。 然而上列公历一年的总日数,实际上是一回归年的实测数,因现用公历每年的日数实为365.2425日,它与一回归年的日数只能是基本相符,到公元四千多年后会再出现一日之差。 实际上在明万历十年九月十八日,回历990年9月16日,公元1582年10月4日前(包括4日)的公历称儒略历,儒略历每年365.25日,它每年与一回归年的差值远大于格列高利历即现代的公历,大约历128年就需多闰去一日,至万历十年已经多闰出十日了。因此,对于儒略历时期的回、公两历换算,不能仍采用(l)、(2)两式,而需依儒略历的年实际日数将上列二式略加修正即可,结果如下: (回历纪年一l)× 0.9702+622.5393 = 所求公历年月日 (3)

阳历转化成农历算法

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是指公

农历大小月是怎么算的

农历大小月是怎么算的 (43人评价)|11519人阅读|85次下载|举报文档 农历大小月是怎么确定的?其规律是什么?农历的历月长度是以朔望月为准的,大月30天,小月29天,大月和小月相互弥补,使历月的平均长度接近朔望月。农历固定地把朔的时刻所在日子作为月的第一天——初一日。所谓“朔”,从天文学上讲,它有一个确定的时刻,也就是月亮黄经和太阳黄经相同的那一瞬间。(太阳和月亮黄经的计算十分繁琐和复杂,这里就不予介绍了)至于定农历日历中月份名称的根据,则是由“中气”来决定的。即以含“雨水”的月份为一月;以含“春分”的月份为二月;以含“谷雨”的月份为三月;以含“小满”的月份为四月;以含“夏至”的月份为五月;以含“大暑”的月份为六月;以含“处暑”的月份为七月;以含“秋分”的月份为八月;以含“霜降”的月份为九月;以含“小雪”的月份为十月;以含“冬至”的月份为十一月;以含“大雪”的月份为十二月。(没有包含中气的月份作为上月的闰月)农历的历年长度是以回归年为准的,但一个回归年比12个朔望月的日数多,而比13个朔望月短,古代天文学家在编制农历时,为使一个月中任何一天都含有月相的意义,即初一是无月的夜晚,十五左右都是圆月,就以朔望月为主,同时兼顾季节时令,采用十九年七闰的方法:在农历十九年中,有十二个平年,为一平年十二个月;有七个闰年,每一闰年十三个月。为什么采取“十九年七闰”的方法呢?一个朔望月平均是29.5306日,一个回归年有12.368个朔望月,0.368小数部分的渐进分数是1/2 、1/3 、3/8 、4/11 、7/19 、46/125,即每二年加一个闰月,或每三年加一个闰月,或每八年加三个闰月……经过推算,十九年加七个闰月比较合适。因为十九个回归年=6939.6018日,而十九个农历年(加七个闰月后)共有235个朔望月,等于6939.6910日,这样二者就差不多了。七个闰月安插到十九年当中,其安插方法可是有讲究的。农历闰月的安插,自古以来完全是人为的规定,历代对闰月的安插也不尽相同。秦代以前,曾把闰月放在一年的末尾,叫做“十三月”。汉初把闰月放在九月之后,叫做“后九月”。到了汉武帝太初元年,又把闰月分插在一年中的各月。以后又规定“不包含中气的月份作为前一个月的闰月”,直到现在仍沿用这个规定。为什么有的月份会没有中气呢?节气与节气或中气与中气相隔时间平均是30.4368日(即一回归年排65.2422日平分12等分),而一个朔望月平均是29.5306日,所以节气或中气在农历的月份中的日期逐月推移迟,到一定时候,中气不在月中,而移到月末,下一个中气移到另一个月的月初,这样中间这个月就没有中气,而只剩一个节气了。 “乘机安全小贴士”安全出行要重视 上面讲过,古人在编制农历时,以十二个中气作为十二个月的标志,即雨水是正月的标志,春分是二月的标志,谷雨是三月的标志……把没有中气的月份作为闰月就使得历月名称与中气一一对应起来,从而保持了原有中气的标志。从十九年七闰来说,在十九个回归年中有228个节气和228个中气,而农历十九年有235个朔望月,显然有七个月没有节气和七个月没有中气,这样把没有中气的月份定为闰月,也就很自然了。农历月的大小很不规则,有时连续两个、三个、四个大月或连续两个三个小月,历年的长短也不一样,而且差距很大。节气和中气,在农历里的分布日期很不稳定,而且日期变动的范围很大。这样看来,农历似乎显得十分复杂。其实。农历还是有一定循环规律的:由于十九个回归年的日数与十九个农历年的日数差不多相等,就使农历每隔十九年差不多是相同的。每隔十九年,农历相同月份的每月初一日的阳历日一般相同或者相差一、二天。每隔十九年,节气和中气日期大体上是重复的,个别的相差一、两天。相隔十九年闰月的月份重复或者相差一个月。二十四节气是由地球在绕太阳公转的轨道上的位置确定的。以每年的冬至为始,每15度为一个节气。换句话说,太阳从黄经零度起,沿黄经每运行15度所经历的时日称为“一个节气”。

相关主题