农历
历法
闰月
公历

每年的农历是怎么算出来的?

为什么冬至、夏至、春分、秋分还能和公历对上。其他日子每年都不一样。是国家有专门的部门来计算农历么??
关注者
45
被浏览
214,576

17 个回答

先回答下面的小问题:

问:为什么冬至、夏至、春分、秋分还能和公历对上?

答:因为二十四节气是中国传统阳历,不是阴历。公历也是阳历,所以正好对上了。

问:为什么其他日子每年都不一样?

答:因为月份和日期是阴历。

问:国家有专门的部门来计算农历么?

答:有的。中国科学院 紫金山天文台 行星科学和深空探测研究部 历算和天文参考系研究团组。




下面回答主问题:

农历是怎么计算出来的?

首先,要强调的是:农历不是阴历,而是阴阳合历

其次,需要注意的是:农历不是数学历法(纯数学计算的历法),而是天文历法(需要使用天文观测数据才能计算)。

第一步,定气。

二十四节气,是彻底的阳历,代表了地球上的太阳直射点。直射点在北回归线的时候,叫做「夏至」,直射点在南回归线的时候,叫做「冬至」。

这个工作需要紫金山天文台用先进的现代天文观测仪器来测量出天文数据,然后再用万有引力定律等公式来计算出二十四节气的时刻。常人无法推算。

古人没有现代天文测量仪器,所以二十四节气的精度是较低的,早期甚至是把一个回归年的时间平均分24个等分,每个分界线一个节气。此方法叫做「平气」,比如明朝农历大统历
明末清初西学东渐,使用西方天文学来提升精度,根据太阳地心视黄经角度来做24等分,每个分界线一个节气。此方法叫做「定气」。这个新版本的农历,就是清朝农历时宪历


二十四节气

注:二十四节气中的的第奇数个节气,叫做「节令」;第偶数个节气,叫做「中气」。

立春 - 节令,雨水 - 中气,惊蛰 - 节令,春分 - 中气,清明 - 节令,谷雨 - 中气;
立夏 - 节令,小满 - 中气,芒种 - 节令,夏至 - 中气,小暑 - 节令,大暑 - 中气;
立秋 - 节令,处暑 - 中气,白露 - 节令,秋分 - 中气,寒露 - 节令,霜降 - 中气;
立冬 - 节令,小雪 - 中气,大雪 - 节令,冬至 - 中气,小寒 - 节令,大寒 - 中气。

第二步,定朔。

介绍一个概念:朔月。

粗略的定义:正好看不到月亮的时候,叫做朔月。

精确的定义 [1]

紫金山天文台负责测算朔月的时刻,这个工作就是定朔。这种测算也是用现代天文仪器测量的。

至于古人,根本就没法这么精确测算。所以唐宋时期的规则不是「定朔」,而是「平朔」,也就是根据最近几个月的朔月时刻取平均数,然后使用插值法来估算下几次的朔月出现时刻的数学期望。后来,天文观测技术进步了,于是元朝授时历开始才改成「定朔」。

出现朔月的那一天(以北京时间为准),则规定名叫「朔日」。

清朝以北京地方时为准,也就是东经 116°25' 的时间。
1916年才把基准改成了东八区的区时(当时民国时期叫「中原标准时间」,现在叫「北京时间」),即东经 120° 的时间。

第三步,划分月份的起止时间。

规定朔日是一个月的第一天,也就是农历「初一」,接下来就是初二、初三等等。下一个朔日,就是下一个月的初一。这样子,月份就划分好了。

第四步,冬至建子。

首先找到包含冬至的月份,规定为「子月」。

第五步,无中置闰,闰前不闰后。

如果某一个子月(包括)到下一个子月(不包括)之间有13个农历月(这个前提非常重要,见 2033年问题),那么就从找到没有中气的月份,规定为闰月。如果不止一个没有中气的月份,则取子月之后第一个没有中气的月份,规定为闰月。

第六步,月建。

不计闰月,十二个月就分别叫做:子月、丑月、寅月、卯月、辰月、巳月、午月、未月、申月、酉月、戌月、亥月。

第七步,正月建寅。

规定寅月为正月,接下来就是卯月是二月,辰月是三月,巳月是四月,午月是五月,未月是六月,申月是七月,酉月是八月,戌月是九月,亥月是十月,子月是十一月(冬月),丑月是十二月(腊月)。

第八步,闰月定名。

根据数字月份名,如果闰月在某月份之后,就名叫闰某月。



把上面的步骤总结一下,就是下面这五条规则 [1]


这种定义是高度简化了,完全不引入「月建」的概念。比如第3条就不引入「子月」的概念,而是一直称之为「农历十一月」,第5条就不引入「正月建寅」的概念,而是说农历十一月之后两个月(不计闰月)规定成「正月」。

参考

  1. ^ a b中国国家标准 GB/T 33661-2017 农历的编算和颁行  http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E107EA4DE9725EDF819F33C60A44B296
编辑于 2023-12-20 16:54

节气并不完全能和公历对上,每年的偏差大约在1-2天。

节气与地球绕太阳的公转有关

简单说,将地球的公转轨道分成24份,即为廿四节气

圈内的是“中气”,圈外的是“节气”

但是由于地球的公转并非是一个匀速的正圆,所以我国古代历法在推算节气的时候曾使用过两种方式——平气法和定气法

【平气法】相对比较简单,就是认为每个节气之间的时间是均等的(大约15.22天)

【定气法】则要复杂点,是按照角度算的,地球公转走15°为一个节气
简略说就是冬天的时候节气之间相隔的时间更短,而夏天会更长一点

由于农历的闰月设置与节气有关系,所以采用定气法以后闰月就会更频繁出现在间隔周期比较长的那端。

节气的计算很精确,至少要精确到某天的几点几分几秒
如,今年的立春点是2021年2月3月22点58分39秒,所以立春日是2月3日,若是往后一个多钟头到了第二天凌晨,哪怕是过一分钟,那也得是4日立春了
加上岁差等原因,所以节气并不完全固定,而是有一两天的偏差的。

发布于 2021-01-15 10:16

农历的一些基本编纂规则:

1、冬至节气必须落在农历十一月内

2、每个月相“朔”(太阳和月亮运行到黄经度数相同的时刻)发生的日子是每个农历月的初一日

3、二十四节气是按照地球绕太阳的公转运动指定的,所以二十四节气在阳历里面日期当然差不多了

4、如果某个农历月份里面没有中气(二十四节气中的十二个,从冬至开始,隔一个算一个),这个月大概率就是闰月

发布于 2022-04-09 21:44
每年的农历是怎么算出来的?
4741 播放 · 2 赞同

农历是阴阳合历性质的天文历法。

发布于 2022-01-22 19:09· 487 次播放

【无可靠信息来源】 为了避免对您造成误导 · 请谨慎甄别

熊颛顼与人类笫一代计算机






五千年前就算出来了




汉初无名氏《 周易·系辞》记载

上古结绳而治

荀爽《九家易》记载

古者无文字 · 其有约誓之事 · 事大大其绳 · 事小小其绳

结之多少 · 随扬众寡 · 各执以相考 · 亦足以相治也



有熊氏被称为“颛顼氏”就是因为熊颛顼研创了《颛顼历》

中国史学界解释“结绳纪事”解释到今天也啥都不是







马克思在他的《摩尔根<古代社会>一书摘要》中,曾说明了印第安人的结绳记事,他们的记事之绳是一种用各色贝珠穿成的绳带。他记载道:“由紫色和白色贝珠的珠绳组成的珠带上的条条,或由各种色彩的贝珠组成的带子上的条条(德文是‘绳子一般的’;‘束、楼’),其意义在于一定的珠串与一定的事实相联系,从而把各种事件排成系列,并使人准确记忆。这些贝珠条和贝珠带是易洛魁人唯一的文件;但是需要有经过训练的解释者,这些人能够从贝珠带上的珠串和图形中把记在带子上各种记录解释出来。”

(《 马克思恩格斯全集》第45卷451页)



楚怀王三闾大夫熊正则墓出土了世界笫一份《年历》









来源:知乎

著作权归读者所有

转载无须联系作者


( 一己之见 · 仅供笑阅)54,071

编辑于 2022-07-09 19:21

公历,简单

农历,复杂而准确。

公历的误差以+-1天计,而农历的误差以分钟计。

农历表达了三个系统:

1.地球自转昼夜交替一次为1干支日

2.月相望朔变化为一阴历月周期以初一、十五表示

3.太阳的地心视角度变化360°为一阳历岁(回归年)周期,以二十四节气表示

外加综合阴历月与阳历岁形成了农历年、年中第几个月与闰月等虚拟概念。

而公历只表达1个系统,混杂了地球自转与公转组成公历年,只需罗列安排365.2425日回归年(岁),十分简单。

中国的农历是由紫金山天文台专门负责编制。

这里也有一份农历计算的参考方法:

可以看出计算过程十分复杂,需要考虑很多因素。

编辑于 2023-08-01 13:23

别听他们瞎扯,“日子每年都不一样”,那是因为公历本身就不准确,所以每年的24节气在公历上的日期、时间也不固定

就好比你身高是固定的,但你每次测身高,测量的量具都有很大误差,于是你的身高就“每次都不一样”,实际上不一样的是量具

编辑于 2021-05-05 17:14
竟然有人质疑古人的智慧?农历到底怎么来的?且看神历“四分历”!【历法变迁】01
169 播放 · 1 赞同
先设定一个历元,一般是冬至(或立春)和合朔都是夜半的时刻,之后推算此后各年冬至(或立春)和合朔时刻都很方便,只要将回归年或朔望月周期不断往上叠加就是了。求得冬至和合朔后,该年的其他节气和朔望时刻也都不难算出,一年的历谱就可以安排出来了。

我做了一个详细的制历过程演示视频,以四分历为例子,手把手带你制历,相信看完你就懂了!
发布于 2023-03-24 19:40· 24 次播放

专门的机构推算应该是的,具体的原理是 农历是阴阳合历 每年的天数、月数、节气之类的考虑地球和太阳的相对位置以及周期(所以会和公历对得上,公历是太阳历)每个月还得考虑月球绕地球的周期、位置等,说白了,就是结合昼夜的24小时、地月的周期、日地的周期,按照一定的算法主要就是取整的方法计算出来的一套计时体系

发布于 2020-12-29 17:16

我国年历计算与出台的官方权威机构是紫金山天文台。农历里节气的日期计算方法现在是定气法(修改一下,之前名字写错了,写成平气法了,平气法是怎样的,可以百度),也就是把一个回归年的太阳黄经圆形轨迹平分为二十四分,每分15度,当太阳运行完这个15度时则进去下一个节气。节气里有分节气与中气,基本是交替出现,以立春始,大寒末,一共二十四个节气,其中处于偶数位为中气。农历的月份始末由月亮周行为准,由于月亮周行一圈平均时常大致为29.5天,因此又定下朔月为初一,而每月日数,是由一个朔月到下一个朔月的时间为准。如果小于30天则定为29天,大于30则定为30天。结合节气,大致一个月会分到两个节气,一般是一个节气加一个中气,而如果某个月没分到中气,则把此月置闰一月,这又叫无中气置闰法。

我国的农历大致如此计算。

编辑于 2021-01-08 17:42

历法是靠观测,不是靠计算。

简单地说,月亮绕地球一圈为一个月,叫阴历。地球绕太阳一圈为一年,叫阳历。把地球绕太阳分24等分叫节气。所以,阴历+节气=农历,农历是最科学也是唯一具有实用性的历法。公历就是阳历,公历的月没有实际意义,是模仿阴历的12月做的划分。公历在没有纸、没有印刷术、没有相当精确计时手段的古代没有可行性。说在古代实行公历纯属虚构

计算只是普通老百姓简便方法。

发布于 2024-01-16 16:03

VSOP-82/87行星理论以及ELP-2000/82月球理论了解一下,基础这些研究,现在即便上一个小学生用简单的编程工具都可以非常精准的计算出相关的天文数据。

发布于 2021-03-22 18:05

农历又名阴阳合历,我国实行的是阴(一般我们农民对农历的称谓)阳历(一般我们农民对公元即公历的称谓)并行!一般意义上的阳历(公历、公元)故名与太阳有关,与太阳的公转规律有关!把四年共多出的近一天时间算入闰年。而农历是以月亮绕地球周期与太阳黄经一起算得的,古人把每年多出来的天数整合成一个月好像是算入单节气的月中,单节气(二十四节之一)的月算闰月(好像是)!一一論法真人

编辑于 2021-01-15 18:53

农历是以明末的时宪历为沿用标准至今。现在由紫金山天文台编制的农历 ,作为中国国家农历标准。否则,各家自行编制的农历会出现各不统一,相差一两天的情况,民间的皇历就是难对上。由于月亮运行不 太 稳定,具体编制农历需要借助天文观察数据 。农历历、极其复杂繁琐 。

农历是月亮历,有个先天的大缺陷就是日期不是安排农时,农事会出现偏差一个月。所以,我国二千年前就在实践中发现用二十四节气作为农历拐杖安排农时 , 以解决农历的先天缺陷问题 。

这二十四节气显然与公历(阳历)相关。每个节气在公历有大体固定日期。如清明总是在公历4月5日±1天,立秋总是在公历8月8日±1天。

公历简单方便,可以直接用日期安排农事,不需要借助 24 节气。所以,公历更适合农业。许多农历爱好者 难以相信这件事,误以为农历更适合农业 。

一一一一一一一

按 : 有反对意见的,请搜一下农历词条。本人熟悉历法 , 谁 抬杠必输必删 。

编辑于 2023-08-01 15:38

那就科普一下年月日吧!!!


什么是“年”?四时寒暑交替是一年。实际是地球绕日一周,现代天文学测定一年是365天5小时48分46秒,约等于365.24天。


什么是”月“,月圆月亏周而复始是一月。一个月是月球绕地球一周?错,月球绕地球一周是27.3217天,这叫恒星月。但实际上,月相是由太阳、地球、月亮的相对位置决定的。地球带着月球绕日公转,月相自然受影响。从地球望去,月相周期是29.5306天,这叫朔望月。


什么是”日“?日出日落又日出是一日,也就是地球自转一圈。现在规定一日24小时。地球自转速度也是有变化的,但人类文明尺度上基本察觉不到。


现行公历有什么问题?问题大了去了。

现行公历完全是太阳历,只对准了一年365天,误差靠置闰日来解决。没错,2月29日实际是闰日,2月叫闰月是不准确的。

公历的月,根本不是月,和月相一点关系都没有。说是时间单位吧,还长短不一,可谓狗屁不通。


农历的月,才是真正的月,农历初一为新月,新月不可见,称为朔日,十五满月为望日。再分大小月,基本与月相准确对应起来了。


然而地球绕日公转造成四季变化,农作物生长周期也是按年进行的,必须根据日照长短和寒暑交替的规律安排农时。中国古人又发明了24节气。

正午日影最短为夏至,日影最长为冬至,然后将一年分为24个节气,每月设一中气,如果没有中气,就设一闰月,依此类推,大体上19年7闰。这样,将太阳历与太阴历(太阴就是月亮)完美结合起来。


农历是阴阳合历,是世界上最合理的历法,是天文、农时、物候、潮汐、民俗的完美结合。


现代人用公历,只是因为公历比较简单,并由于历史原因,用的人最多而已。公历,远远称不上合理。

发布于 2024-01-16 14:54

参考文件:《农历的编算和颁行》 在线预览|GB/T 33661-2017

农历是中国的传统历法,属于阴阳合历,所以民间使用阴历称呼农历是不准确的。

农历的历法规则与地球和月球的运动周期密切相关,且调和了月相的变化和四季的更迭。

1、农历的一天定义为一个昼夜交替的时间(24小时),也就是某地前一个正午时刻到下一个正午时刻的时间间隔。

我们知道,昼夜交替的原因是地球自转,但是实际上地球自转一周的时间是23小时56分4秒,和一个昼夜交替的时间差了3分56秒,这多出来的3分56秒是地球绕太阳公转造成的。

如图反映了地球自转一周前后的位置。地球自转一周后,其在公转轨道上的位置也从X处移到了Y处,原先正对太阳的A点(第一天正午)在自转一周后并没有正对太阳了,因此还需要自转一点时间,才能使A点再次正对太阳(第二天正午),所以A点两次正午的时间间隔大于地球的自转周期。天文学上称地球自转一周的时间为恒星日(23小时56分4秒),而两次正午的时间间隔称为太阳日(24小时)。历法上的一天实际上指的是太阳日,也就是两次正午的时间间隔。

恒星日和太阳日(图源网络,侵删)

2、阴历部分:农历的一个月(小月29天,大月30天)严格合乎月相的变化周期(29.53天)。

月相的变化周期(两次满月的时间间隔)与月球绕地球的公转周期密切相关,却不是严格相等的。

月球绕地球公转一周为27.32天,称为恒星月;月相的变化平均周期为29.53天(实际在29.27-29.83天之间变化),称为朔望月,也就是从一次满月到下一次满月的时间。

朔望月时间长于恒星月,与地球绕太阳的公转有关。如图,由于地球的公转,月球绕地球公转一周后(从位置1到位置2),还需要公转一些时间才能使得日地月再次共线。历法上的一个月指的是一个朔望月。

恒星月和朔望月(图源网络,侵删)

“朔”指的是月球处于地球和太阳之间的时刻,这一天夜空完全不能看到月亮。

“望”指的是地球处于月球和太阳之间的时刻,这一天夜空看到的是满月。

农历上规定朔出现的那天是初一。如果这天朔的时刻出现得很早,则29天之后就会出现下一次朔,所以这个月只有29天;如果这天朔的时刻出现得很迟,则要到30天后才会出现下一次朔,这个月便是30天。

可以想象,如果某个初一朔的时刻特别早,而这个朔望月又很短,就会出现连续小月(29天);反过来如果某个初一朔的时刻很迟,而这个朔望月又很长,就会出现连续大月(30天)。

3、阳历部分:农历的一年(平年354天左右,闰年384天左右)基本合乎四季更替的周期(365.242天)。

一个四季更替的周期称为一回归年(365.242天),实际上一回归年并不严格等于地球绕太阳公转的周期(365.256天),这与地轴的旋转有关(地球的公转周期称为恒星年)。历法上的一年指的是一回归年。

农历12个朔望月的时间约为354天,这与一回归年差了十多天,如不消除误差,经过多年累积,正月过夏天也是完全有可能的。为了指导农业生产,需要使得农历一年的时间接近一回归年,所以农历中使用“置闰法”调合农历一年的时间,也就是在某一年里增加一个“闰月”以补足与回归年的误差。

那么,应该在哪个位置插入闰月?

这里需要提到农历中的二十四节气。农历中把一回归年等分为24份,每个节点为一个节气,即:立春、雨水、惊蛰、春分……小寒、大寒。

二十四节气中,处于偶数位的节气称为中气,如:雨水、春分、谷雨……冬至、大寒。

节气中气
立春雨水
惊蛰春分
清明谷雨
立夏小满
芒种夏至
小暑大暑
立秋处暑
白露秋分
寒露霜降
立冬小雪
大雪冬至
小寒大寒

《农历的编算和颁行》中规定,包含冬至的月份为农历十一月(冬月),从冬月开始,按照“朔出现的那天为初一”的原则排列月份,如果有一个月中没有包含中气,则这个月定为闰月。例如,2023年(农历癸卯年)农历二月的后一个月,如果直接定为农历三月,则这个月只有立夏这个节气而没有中气,所以需要把这个月定为闰二月,再下个月定为农历三月。

通过这样的规定,农历每个月都有了一个中气,而十二个中气严格对应了一回归年,从而使得一农历年近似合乎一回归年。通过计算,19年会产生7个闰月。

(如有表述不准确的地方还请指正)

编辑于 2023-05-08 09:02


最近处理工作任务的时候遇到了转换农历的问题。



农历,是我国现行的传统历法。它是根据月相的变化周期,每一次月相朔望变化为一个月,参考太阳回归年为一年的长度,并加入二十四节气与设置闰月以使平均历年与回归年相适应[1]。

对于我们处理数据来说,并不需要去详细研究农历与公历之间的转换关系。在Python中,ZhDate库支持农历-公历互相转换、日期加减以及全中文日期生成,内置了1900-2100年的农历数据,仅依赖Python内置模块。 github.com/CutePandaSh/

由于ZhDate属于Python的第三⽅开源模块,因此需要额外安装、导⼊后,才能使⽤。直接在命令⾏窗⼝中输⼊如下命令:

pip install zhdate

详细使用方法

zhdate库,不用网络接口直接本地计算中国农历,支持农历阳历互转[2]。

阳历与农历日期的相互转换

在交互式环境中输入如下命令:

from zhdate import ZhDate
date1 = ZhDate(2022, 2, 2)  # 新建农历 2022年二月初二(龙抬头)的日期对象
print(date1)  # 直接返回农历日期字符串d

输出:

农历2022年2月2日

在交互式环境中输入如下命令:

t_date1 = date1.to_datetime()
t_date1

输出:

datetime.datetime(2022, 3, 4, 0, 0)

在交互式环境中输入如下命令:

from datetime import datetime
dt_date2 = datetime(2022, 2, 6)
date2 = ZhDate.from_datetime(dt_date2)  # 从阳历日期转换成农历日期对象
date2

输出:

农历2022年1月6日

闰月

在交互式环境中输入如下命令:

date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年4月15日
print(date3.to_datetime())

输出:

2020-05-07 00:00:00



在交互式环境中输入如下命令:

date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年闰4月15日
print(date3.to_datetime())

输出:

2020-06-06 00:00:00

这一年农历4月15日的同学,可以分别在5月7日和6月6日分别过两次农历生日。

其他

中文输出,在交互式环境中输入如下命令:

dt_date4 = datetime(2022, 3, 4)
date4 = ZhDate.from_datetime(dt_date4)
print(date4.chinese())

输出:

二零二二年二月初二 壬寅年 (虎年)

当天的农历日期,在交互式环境中输入如下命令:

ZhDate.today()

输出:

农历2022年2月7日

此外,zhdate模块也支持加减法。两个zhdate对象相减可以得到两个农历日期的差额,同时加整数也可以返回相隔天数以后的新农历对象。



实战:计算节日距离天数

下面通过一个实战项目练习一下这个zhdate模块。

加入我们想快速地了解今天距离某个节日还有多少天?可以使用zhdate和datetime库搭配解决这个问题。



在交互式环境中输入如下命令:

today = datetime.now()
data_str = today.strftime('%Y-%m-%d')
data_str

输出:

'2022-03-09'

计算距离劳动节的天数,在交互式环境中输入如下命令:

oneDay = datetime(2022, 5, 1)
difference = oneDay.toordinal()-today.toordinal()
print(f'今天 {data_str} 距离五一劳动节还有 {difference} 天')

输出:

今天 2022-03-09 距离五一劳动节还有 53 天



计算距离中秋节的天数,在交互式环境中输入如下命令:

oneDay = ZhDate(2022, 8, 15).to_datetime()
difference = oneDay.toordinal()-today.toordinal()
print(f'今天 {data_str} 距离中秋节还有 {difference} 天')

输出:

今天 2022-03-09 距离中秋节还有 185 天

大家有时间也可以动手试一试,测试一下还距离其他节日多少天?实战时要注意该节日是按照公历统计还是农历设置的。

发布于 2022-04-22 14:12