`
conkeyn
  • 浏览: 1518346 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

农历中闰年闰月的算法

阅读更多

转自:http://www.bulibuqi.com/redirect.php?tid=2775&goto=lastpost

 

太阳日 :星期日
http://baike.baidu.com/view/411644.htm

恒星日 :地球自转一周实际所需的时间,或春分点两次经过同一子午圈所需的时间,也就是某一个恒星两次经过同一子午线所需的时间。一个恒星日等于23小时56分4秒。
http://baike.baidu.com/view/25969.htm

恒星年 :地球绕太阳一周实际所需的时间,也就是从地球上观测,以太阳和某一个恒星在同一位置上为起点,当观测到太阳再回到这个位置时所需的时间。一个恒星年等于365天6小时9分10秒。
http://baike.baidu.com/view/25932.htm

回归年 :从地球上看,太阳绕天球的黄道一周的时间,即太阳中心从春分点到春分点所经历的时间,又称为太阳年。1回归年 = 365.24220日 = 365日5小时48分45.5秒。
http://baike.baidu.com/view/49345.htm

 

中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。闰月加到哪个月,以农历历法规则推断,主要依照与农历的二十四节气相符合来确定。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。如1984年鼠年的农历中,有两个十月,通常成为前十月和后十月(即闰月)。农历闰年闰月的推算,3年一闰,5年二闰,19年七闰;农历基本上19年为一周期对应于公历同一时间。如公历的2001年5月27日、1982年5月27日和1963年 5月27日这个日子,都是闰四月初五。
  公历1982年至2042年与农历闰年闰月对照表:
  1982年5月23日 闰四月小 壬戊年
  1984年11月23日 闰十月大 甲子年
  1987年7月26日 闰六月大 丁卯年
  1990年6月23日 闰五月大 庚午年
  1993年4月22日 闰三月大 癸酉年
  1995年9月25日 闰八月大 乙亥年
  1998年6月24日 闰五月小 戊寅年
  2001年5月23日 闰四月大 辛巳年
  2004年3月21日 闰二月大 甲申年
  2006年8月24日 闰七月大 丙戊年
  2009年6月23日 闰五月大 己丑年
  2012年5月21日 闰四月小 壬辰年
  2014年10月24日 闰九月小 甲午年
  2017年7月23日 闰六月大 丁酉年
  2020年5月23日 闰四月小 庚子年
  2023年3月22日 闰二月大 癸卯年
  2025年7月25日 闰六月大 己巳年
  2028年6月23日 闰五月大 戊申年
  2031年4月22日 闰三月大 辛亥年
  2033年8月25日 闰七月大 癸丑年
  2036年7月23日 闰六月小 丙辰年
  2039年6月22日 闰五月大 己未年
  2042年3月22日 闰二月大 壬戊年

农历的历年长度是以回归年为准的,但一个回归年比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个朔望月,显然有七个月没有节气和七个月没有中气,这样把没有中气的月份定为闰月,也就很自然了。

农历月的大小很不规则,有时连续两个、三个、四个大月或连续两个三个小月,历年的长短也不一样,而且差距很大。节气和中气,在农历里的分布日期很不稳定,而且日期变动的范围很大。这样看来,农历似乎显得十分复杂。其实。农历还是有一定循环规律的:由于十九个回归年的日数与十九个农历年的日数差不多相等,就使农历每隔十九年差不多是相同的。每隔十九年,农历相同月份的每月初一日的阳历日一般相同或者相差一、二天。每隔十九年,节气和中气日期大体上是重复的,个别的相差一、两天。相隔十九年闰月的月份重复或者相差一个月。

分享到:
评论

相关推荐

    VC++的阴历算法演示

    在描述中提到的"复件 (2) 阴历算法"可能包含了一个预实现的农历算法源代码文件,开发者可以通过阅读和理解这个代码来学习如何在VC++中处理农历。通常,这类代码会包含以下部分: - **数据结构**:定义表示日期的...

    java版农历算法

    本话题聚焦于"Java版农历算法",这是一种实现中国农历计算的算法,它使得Java开发者能够轻松地在程序中处理农历相关的功能,比如节日提醒、生日计算等。 中国农历,又称阴历,是一种根据月亮的相位(新月、满月)来...

    公历转农历的算法 公历转农历的算法

    ### 公历转农历的算法解析 在信息技术领域,日期处理是常见的需求之一,尤其是在具有农历文化背景的地区,如中国、韩国等。将公历(即格里高利历)转换为农历(即阴阳合历)是一项复杂而有趣的技术挑战。本文将深入...

    VC++万年历 农历算法示例

    此外,还可以利用Windows API中的时间函数,如GetLocalTime和SystemTimeToTzSpecificLocalTime,来获取和显示当前的公历日期,然后根据自定义的农历算法转换成农历日期。 为了便于用户交互,你可以设计一个简单的...

    VB计算农历的算法.doc

    在VB(Visual Basic)编程中,计算农历的算法是一个关键的日期处理功能。这个算法涉及到农历与公历之间的转换,并且通常需要一个特定的数据结构来存储农历年份、月份和日期的信息。根据提供的描述和部分内容,我们...

    可以实现闰年判断的中国日历

    具体的闰月位置和是否为闰年取决于农历的复杂算法,包括太阳黄经、月亮盈亏等天文现象。因此,为了实现中国日历的闰年判断,我们需要结合农历的历法规则。 在JAVA中,我们可以从以下几个步骤入手: 1. **设计农历...

    阴历算法 数据 和源码

    这部分文档深入探讨了中国公历和农历的计算原理,包括年份、月份、日期的计算方法,以及如何处理非标准年份(如闰年)和非标准月份(闰月)的问题。 4. **万年历程序(阴历的1900-2049)**: 万年历程序是实现...

    c#农历转公历以及公历转农历

    在C#编程中,处理日期和时间是常见...总的来说,C#中实现农历和公历的转换是一项技术挑战,但借助已有的类库或自行编写算法,都可以完成这一任务。在实际项目中,选择合适的解决方案并确保其兼容性和性能是非常重要的。

    VB计算农历的算法-----

    VB计算农历的算法是编程中实现农历转换的关键技术,它主要涉及到如何将公历日期转换成农历日期,并处理闰年和大小月的情况。在VB中,这个算法通常以函数的形式存在,例如`GetYLDate`函数,用于获取指定公历日期对应...

    IOS应用源码——object-c阳历转阴历算法.zip

    总之,这个"IOS应用源码——object-c阳历转阴历算法.zip"提供了实现阳历到阴历转换的核心算法,对于需要处理农历日期的iOS开发者来说,是一个非常实用的资源。通过学习和理解这段代码,开发者不仅可以掌握日期转换的...

    电子万年历中公历农历互换算法研究

    ### 电子万年历中公历农历互换算法研究 #### 摘要与背景 随着信息技术的进步,传统的纸质万年历已经逐渐被电子万年历所取代。电子万年历不仅具有便携性,还能提供更为丰富的信息展示功能。然而,现有的大多数电子...

    纯PB代码实现公农历的算法不用DLL

    标题中的“纯PB代码实现公农历的算法不用DLL”指的是使用PureBasic编程语言,通过纯代码方式编写了一个计算公历和农历转换的算法,而没有依赖任何外部动态链接库(DLL)。这是一种自我包含的编程解决方案,可以提高...

    万年历的完整算法,C语言

    为了使阴历年与阳历年的平均长度接近,农历设有闰月,平均每19年会有7个闰月。农历日期的计算涉及到月亮的周期、节气变化和闰月的插入规则。 再者,节气算法是农历中的重要部分,它是中国传统历法的独特特征。节气...

    万年历算法及源码.doc

    阴历算法相对复杂,因为它涉及到农历月的长度变化和闰月的处理。文档中提到,为了表示1900年到2100年间的阴历数据,需要一个400字节的压缩数据表`lunar_calendar_month_table[]`。这个表格存储了每个农历月份的天数...

    java 农历与公历互转(1891-2100) v2.0.0

    项目中应包含了判断是否为闰年及闰月的算法。 3. **日期对象表示**:在Java中,`java.util.Date`和`java.time`包下的`LocalDate`类常用来表示日期。本项目可能使用了自定义的类如`LunarEntity`来存储农历日期,该类...

    公历转农历c++算法

    【标题】"公历转农历c++算法"指的是在C++编程环境中实现将公历日期转换为农历日期的算法。这种算法通常涉及到日期处理、计算和中国的农历规则。在中国,农历是传统上用于记录日期的系统,而公历是国际上广泛采用的...

    JavaScript 实现农历(万年历)

    在JavaScript中实现万年历,需要理解农历的计算规则,包括月相、节气和闰年闰月的处理。这通常涉及复杂的数学和天文知识。 首先,`calendar.js`可能是实现农历转换的核心代码文件,它可能包含了从公历到农历的转换...

    VC++阳历(公历)到阴历(农历)转换

    2. **农历算法**:农历转换的核心在于算法,它需要考虑闰年、闰月等因素。公历到农历的转换涉及到天干地支、二十四节气等复杂计算,通常包括以下几个步骤: - **月相计算**:根据阳历日期,计算出对应的月相,即...

    Java日历的农历算法

    在软件开发中,特别是涉及到中国传统文化的应用场景下,如节日提醒、农历日期查询等,往往需要实现农历(阴历)与公历(阳历)之间的转换功能。本文将详细介绍一个基于Java语言实现的农历算法,并对其核心代码进行...

Global site tag (gtag.js) - Google Analytics