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. vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10

    后期会在博客首发更新:http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 网上的方法多种, ...

  2. OpenCASCADE JT Assistant

    OpenCASCADE JT Assistant eryar@163.com Abstract. Siemens’ JT data format accepted as the world’s fir ...

  3. Boot from Volume - 每天5分钟玩转 OpenStack(61)

    Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume),那么如何使 volume 成为 bootable 呢? 现在我们打开 instance 的 ...

  4. AngularJS之Directive(三)

    前言 angular核心部分如下图几大块,最重要的莫过于指令这一部分,本文将重点讲解指令这一部分,后续笔者将通过陆续的学习来叙述其他如:factory.service等,若有叙述错误之处,欢迎各位指正 ...

  5. C# 对象锁

    现在有一种场景,服务端将一个任务派发给10个客户端执行,所有客户端执行完后,整个任务才算执行完. 每个客户端执行完后,通过http发送一个完成的消息给服务端,服务端发送邮件通知给用户. 当10个客户端 ...

  6. 基于表的数据字典构造MySQL建表语句

    表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...

  7. EntityFramework 实体拆分和表拆分

    之前有人问过 EF 如何进行实体拆分和表拆分?我记得当时认为不可能,理由忘记了,后来又有人发了一段配置截图,发现原来是可以的,不记录的东西容易忘掉,关于 EF 实体拆分和表拆分,下面是自己的一些整理. ...

  8. 分享一段数据库中表数据更新SQL

    应用场景 我们在应用程序开发的时候,经常会遇到这样的一种情况:附属表更新了,主表的数据没有更新,这个关联表不只是外键的关联(通过附属表 ID 关联),主表中还会存在一些附属表的字段,这样一般做的目的是 ...

  9. NPM使用前设置和升级

    升级版本npm3和切换模块数据源为taobao,大大提高下载速度. 步骤一:升级npm3默认npm为2.x推荐使用npm3. npm i -g npm@3 步骤二:修改npm数据源为taobao(默认 ...

  10. idea 自动提示生成 serialVersionUID

    from: http://tonycody.blog.51cto.com/8421818/1401422 Intellij IDEA 默认没启用这个功能. Setting->Inspection ...