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://www.cnblogs.com/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. Atitit 图像处理 深刻理解梯度原理计算.v1 qc8

    Atitit 图像处理 深刻理解梯度原理计算.v1 qc8 1.1. 图像处理  梯度计算  基本梯度 内部梯度 外部梯度 方向梯度1 2. 图像梯度就是图像边缘吗?2 1.1. 图像处理  梯度计算 ...

  2. Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理

    Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理 1.1. 最开始的垃圾邮件判断方法,使用contain包含判断,只能一个关键词,而且100%概率判断1 1.2. 元件部件串联定律1 1.3. 垃 ...

  3. atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx

    atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx 1.1. 版本历史2 2. 设计模式是什么2 2.1. 模式就是在一种场合下对某个问题的一个解决方案.& ...

  4. Atitit 在线支付系统功能设计原理与解决方案 与目录

    Atitit 在线支付系统功能设计原理与解决方案 与目录 1.1. 支付系统1 1.2. 独立的支付子体系..微服务架构..1 1.3. 参考书籍1 支付战争 [The PayPal Wars:Bat ...

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

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

  6. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...

  7. Atitit paip.对象方法的实现原理与本质.txt

    Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...

  8. Atitit 面向对象  封装的实现原理

    Atitit 面向对象  封装的实现原理 1.1. 动态对象的模拟使用map+函数接口可以实现1 1.2. 在用结构体 + 函数指针 模拟 对象 1 1.3. This指针..1 1.4. " ...

  9. Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途

    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途 1.1. 高斯模糊 的原理(周边像素的平均值+正态分布的权重1 1.2. 高斯模糊 的用途(磨皮,毛玻璃效果,背景虚化 ...

随机推荐

  1. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  2. Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing

    B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. T ...

  3. 手动实现jQuery Tools里面tab功能

    平时开发中用的Javascript类库都是jQuery,用到插件或者第三方类库能从jQuery Tools里面找到,基本不用其他的.当然有时同事喜欢使用jQuery UI里面的插件.并且jQuery ...

  4. linux下的常用命令

    1 fg切换前后台作业 将后台作业转换为前台作业,”fg %作业号“ 2 stty改变和打印终端行设置 tostop 阻止后台作业写终端,stty -a显示终端的所有选项 3 uname查看机子信息 ...

  5. OWIN 中 K Commands 与 OwinHost.exe 相等吗?

    OwinHost.exe: While some will want to write a custom process to run Katana Web applications, many wo ...

  6. 塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考

    最近在使用 MVC 开发的时候,遇到一个对我来说"奇怪的问题",就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts ...

  7. C# 保护Excel文档

    C# 保护Excel文档 说到保护excel文档,我们首先想到的是密码保护的方式,但excel与word有点不一样,一般情况下,每个excel工作薄都或多或少地含有一定数量的工作表,因此保护excel ...

  8. SQL Server 隐式转换引发的躺枪死锁-程序员需知

    在SQL Server的应用开发过程(尤其是二次开发)中可能由于开发人员对表的结构不够了解,造成开发过程中使用了不合理的方式造成数据库引擎未按预定执行,以致影响业务.这是非常值得注意的.这次为大家介绍 ...

  9. IntelliJ IDEA 转移C盘.IntelliJIdea(索引目录)

    转移原因: C盘是机械硬盘,并且容量不多的情况下,建议转移. 转移步骤: 找到索引目录 win10系统下默认路径:C:\Users\asus\.IntelliJIdea2016.2 *复制或剪切到新的 ...

  10. 使用签名来保证ASP.NET MVC OR WEBAPI的接口安全

    当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据.如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据. 所以我们需要使用某种安全机制来保证请求的合法.现在最常用的 ...