atitit.农历的公式与原理以及农历日期运算

1. 农历的概述1

2. 如何在电脑程序里面计算农历??1

3. 农历的公式2

4. 获取当日农历日历3

5. 历史日期公式加查表才能得到精确日期3

6. 参考4

1. 农历的概述

我国现在采用的农历历法是《时宪历》,它源于清朝顺治年间(公元1645)颁布的《顺治历》,它有两个不足之处:一个是日月合朔和节气的时间以北京当地时间为准,也就是东经116度25分的当地时间,其节气和新月的观察只适用于中原地区。其它经度的地方,因为时间的关系,对导致日月合朔和节气时间的差异导致置闰和月顺序各不相同。另一个不足之处就是日月合朔时间和节气时间判断不精确,如果日月合朔时间和节气时间在同一天,不管具体的时间是否有先后,一律将此节气算做新月中的节气,这样一来,如果这个节气是中气,就会影响到闰月的设置。历理历法针对这两点进行了改进,对节气时间和日月合朔时间统一采用东经120度即东八区标准时,这样在任何时区的节气和置闰结果都是一样的,以东八区标准时为准。对于节气时间和日月合朔时间在同一天的情况,精确计算到时、分、秒,只有日月合朔时间在节气时间之前,这个节气才包含在次月内。历理历法从理论上讲更符合现代天文学的精确计算,但是需要注意的是,历理历法仍然只是存在于理论上的历法,我国现行的农历历法依然是民间历法《时宪历》或《顺治历》。

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2. 如何在电脑程序里面计算农历??

理论上,显示农历与显示公历一样的方便。It领域,内部时钟也并不使用公历,公历的大纪元是耶稣诞生的0年开始的。It领域的使用的是时间戳方式,大纪元是Unix 纪元

it领域中有一种常用的计算时间的方法:
Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)

所以只要有完整的农历推算公式即可 从时间戳换算到农历。

3. 农历的公式

有人说农历没有精确的公式,这是错误的,农历有精确的公式,不然怎么推算出来未来的万年历呢。。

农历历月的天数只有29日和30日两种

农历的大小月是完全不固定的,  这就使得大小月的安排不固定,而需要通过严格的月相观测和计算来确定。因此,农历中连续两、三个月是大月或是小月的事是常有的,甚至还出现过如1990年九、十、十一、十二连续四个月是大月的罕见情况。

二、农历闰月的大月和小月设置也有规律

农历闰月一般为29天,是小月。但也有例外——那就是:按上述农历大小月的设置办法,将零头数累加到正好有一天的那一个月如果正逢闰月,就把这多出的一日加在这个闰月上,那么这个闰月就有了30天,成了大月了。

四、农历规则
在古代,日的定义:以地球自转一周为一日。其中以太阳离地平线最远的一个时辰为子时,相当于北京时间23:00~1:00。但是农历中一天始于子正(0:00),而非子初(23:00)。

月策与置末规则:朔日为每月起点(初一日);朔日(月初一日)到下个朔日(下月初一日)有多少天、这月就有多少天。有30天为大月、有29天为小月;唐朝武德二年(公元619年)以前用的是平朔,武德二年(公元619年)以后用的是定朔。
年策与置闰规则:以冬至日必须在子月(寅正十一月),上个冬至月(寅正十一月)到下个冬至月如有12个月就不置闰,如有13个月就要置闰,以上个冬至月之后第一个无中气的月份为闰月,在几月后面就称闰几月。 例如:壬子年(2032)冬至月到癸丑年(2033)冬至月之间有12个月,就不置闰。癸丑年(2033)冬至月到甲寅年(2034)冬至月有13个月就必须置闰,在癸丑年(2033)冬至月(十一月)后的第一个无中气之月是该月的下一个月,就定为闰月。它正好十一月后,所以就叫闰十一月。

其二可以利用公式推算阴历日期: 
设:公元年数-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即是阴历二十七日。

首先,此算法存在精度问题,±1天属正常现象(非四舍五入问题)。

其三,此算法只能得到日数,不能得到月数

 一般人接触到的阴阳历是民用历法,它是政府颁令的以东经120度计算的历法或称中原标准时间或北京时。如果,我们用不同时区、不同经度为子午线来重新计算阴阳历,民用历法的置闰法则出了很大的问题。不同时区的闰月可能落在不同月。换言之,在一百年内,任何两个时区的闰月顺序模式是会不相同的

4. 获取当日农历日历

原则上,只要有时间戳,在加上农历日期运算即可得到当日 农历日期。。

但是 农历公式以及农历日期运算比较复杂。目前可能查表法比较好的一个方式,或者从公历转算。。

5. 历史日期公式加查表才能得到精确日期

因为公历(现在用的是格里历,以前还曾用儒列历)和中国农历都不是严格按一个公式计算得到的,所以两个历法没有直接的公式。

试图用一个简单的公式,而不利用许多像万年历一样的数据(尽管可以简化),就达到公农历转换的目的,这是不可能的

于公历和农历的置闰,倒都有一定的方式推算,并不困难。

如果只是天文数据,其实都还是可以算的——因为天文周期十分稳定,我们只要严格地按天文周期推算就可以了。可是还有更为麻烦的一点,就是公历和农历这些历法,并不是完全严格地按照天文上的实际周期进行的,还有许多人为的因素。最著名的就是罗马皇帝几次修改2、8等月份长短,以及儒列历中因计算不准确而人为地去掉了十天等事。中国农历也有因为古代天文观测不准确造成的政府颁布的历法与天象不吻合的(我们不能苛求古人观测的精度)。所以这两部历法都是与一个时期社会有关的东西,也就没有一定的规律可循了。

从理论上讲,本文介绍的算法在精度允许的范围内可以计算前后几千年的农历年历,但是对古代的农历计算需要小心。首先是“平朔”和“定朔”的问题,唐代以前使用的是平朔方法定月首,本文介绍的计算方法采用的是“定朔”方法,因此计算出的年历与唐代以前的历史会不一致。另外,即是在唐代以后采用“定朔”的历法,因为古代天文观测和计算受条件限制,可能不够精确,因此与现在用天文算法计算出的结果可能并不一致。所以对历史农历的计算应该以历史事实为主,天文计算为辅,当计算与历史不一致时,要根据历史数据进行校正。Calendar.exe是根据本文介绍的算法编写的日历小程序,没有太多的功能,主要是为了验证算法,因为没有历史数据用于修正结果,因此不支持1601年以前的农历计算(也就是说按照天文算法计算出来的结果可能和实际历史上的历法不符)

6. 参考

算法系列之二十:计算中国农历(二) - oRbIt 的专栏 - 博客频道 - CSDN.NET.html

atitit.农历的公式与原理以及农历日期运算相关推荐

  1. 【转帖】中国农历规则和日历原理

    日历的基本原理 来源:http://www.herongyang.com/year_gb/calendar.html 日历是以天文学的三个不同的周期作为基础的: 天:地球自转一周. 月:月球围绕地球运 ...

  2. atitit.jndi的架构与原理以及资源配置and单元測试实践

    atitit.jndi的架构与原理以及资源配置and单元測试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin  <database> ...

  3. Atitit.执行cli cmd的原理与调试

    Atitit.执行cli cmd的原理与调试 1. /c  与/k1 2. /k  参数,有利于调试1 3. -------code2 4. 打开程序后与openner脱离关系3 5. 返回参数 St ...

  4. Atitit.木马病毒websql的原理跟个设计

    Atitit.木马病毒websql的原理跟个设计 1. Keyword Wsql { var sql="select "+p.txt+" as t,"+p.v+ ...

  5. python 获取节假日,二十四节气,中国农历,星次、每日凶煞、每日值神、农历建除十二神、农历每日宜忌、彭祖百忌、每日五行、二十八星宿、天干地支、农历生辰八字、时辰凶吉等

    Python 农历项目cnlunar的使用 文章目录 Python 农历项目cnlunar的使用 前言 一.cnlunar是什么? 二.使用步骤 1.安装pip 2.使用 总结 前言 1.不使用寿星通 ...

  6. php农历生日计算,php实现的农历算法实例

    本文实例讲述了php实现的农历算法.分享给大家供大家参考.具体如下: function lunarcalendar ($month, $year) { global $lnlunarcalendar; ...

  7. mysql 获取农历年份_iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  8. 农历查询API接口说明,农历API

    农历计算,百度的计算比较准确,包括黄历禁忌计算都比较准确,而其他的一些网站,你可以对比下,基本上农历要是能准确就算不错了,一般是闰月就有问题,年头年尾也有问题. 一般是JS实现的,很少有Java版本的 ...

  9. php 当前时间转换成农历,php如何实现公、农历日期的想互转换的实例

    这篇文章主要介绍了PHP 实现公历日期与农历日期的互转换的相关资料,希望通过本文大家能帮助到大家,需要的朋友可以参考下 PHP 实现公历日期与农历日期的互转换 前言: 今天根据客户的需求对时间进行了转 ...

  10. 日期转换,农历转阳历和阳历转农历

    农历转阳历和阳历转农历,参考网上代码进行修改,网上代码农历数据表有2处错误导致转换日期不对,我已经修改了,通过lunar-date-2.4.0已验证到1901~2050年结果是正确的 //date_u ...

最新文章

  1. 两台ubuntu虚拟机环境下hadoop安装配置
  2. 每日一皮:不允许穿格子衫之后...
  3. Android 开源之StickyHeaderListView 标题渐变、吸附悬停、筛选分类、动态头部
  4. Spring的事务管理1
  5. 计算机信息系统安全保护条例最新,计算机信息系统安全保护条例.doc
  6. 单向链表的C语言实现与基本操作
  7. AWVS/Nessus/Burpsuite的简单使用
  8. 使用iView构建Vue项目步骤
  9. C#程序打包安装部署之创建快捷方式
  10. 公司 MyEclipse设置和SVN安装设置
  11. DoIP专栏 - DoIP概述
  12. 玩盲盒的泡泡玛特,美妆零售盒里究竟藏有什么“秘密”?
  13. Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
  14. Python学习之cookies及session用法
  15. 武汉加油——传染病模型拟合
  16. 窝囊同事做测试三年未涨工资,被开当天,bat全部大佬门口迎接!
  17. 计算机开机数字键盘解锁,数字键盘怎么解锁
  18. Periodic Strings (求HoHoHo字符串最小周期)
  19. 程序员的痛点:我竟然还不懂Linux性能优化
  20. FPGA设计中,产生LFSR伪随机数

热门文章

  1. 隐马尔可夫模型python_机器学习中的隐马尔科夫模型(HMM)详解
  2. 草根学Python(十四) 一步一步了解正则表达式
  3. JDBC更新10W级以上数据性能优化
  4. 管理分支:git branch
  5. JAVA JDBC常见面试题及答案
  6. Hibernate(2)
  7. ERROR 1044 (42000)
  8. hdu 2412(树形dp)
  9. 坐标字符NYOJ 298 点的变换 (矩阵快速幂)
  10. 给 Android 应用开发者的十个建议