农历计算方法

计算示例:https://blog.csdn.net/weixin_42763614/article/details/103051262

一、定气定朔

农历是一种阴阳合历,故而计算农历既需计算阴历使用的合朔,也要计算阳历使用的节气。农历最早使用平气和平朔,但平朔常有一日误差,以日食校验多不合。所以经历法发展改用定朔法。平气也有误差,但难以简单观察到,并且定气法容易打破农历“无中气置闰”的原则,所以在清代以前一直未得采用。直至近代历法发展,基于对精度及合天的要求,不得不重新改定规则。具体见第三点。

所以计算农历需要先找出气朔,计算气朔则需计算太阳和月亮的黄经,现代天文学使用行星历表计算天体位置。python有第三方库提供相关功能,本文提供的算法以PyEphem库为例,利用太阳黄经计算节气,由SolarTerms函数处理,合朔则直接使用库中提供的next_newmoon函数进行计算。

农历固定了一年十二个月,对应12个中气。如果出现13个月,必然有1个月没有中气,称为闰月,因此固定月序的中气也是固定的。对应关系为:

月建
月序 十一月 十二月 正月 二月 三月 四月 五月 六月 七月 八月 九月 十月
中气 冬至 大寒 雨水 春分 谷雨 小满 夏至 大暑 处暑 秋分 霜降 小雪

确认这种对应关系,即可分别使用参数i和j来记录合朔次数和中气序号,当某月为无中气月时,次月起对应的中气序仍从上月。

二、确定岁首

虽然当前农历以雨水作为正月中气,但历法的一些规则和计算实际是从冬至开始,一年的第一个月是十一月。建正只用于确定年干支的起始月。因为历法推算依赖于对天象的观测,特别是确定一年的长度需要测量同一节气相隔的日数,只有冬至或夏至可通过比较前后日的影长方便确定,历法推算从这里开始。但为与物候结合方便农业生产与工作需要,又将正月确定为雨水中气,作为日常生活中年的开始。

程序中的findDZS函数即处理查找岁首的问题。

三、置闰规则

两个冬至的间隔为回归年长度约365.2422日,朔望月长度约29.53059日,故可能合朔12或13次。平气法时,一气的长度必然大于一朔的长度,所以只会存在一个无中气月。采用定气法后,气长不固定,因此存在一年有多个无中气月或一月有多个中气的情况,所以重新规定(序号越大优先级越高):(见附注)

原1:判断每月是否有中气,没有则置闰。

增2:仅对从冬至月开始的第一个无中气月置闰。

增3:若两个冬至月间合朔仅12次,则不置闰。

是否置闰的根本原则是,保证一年的农历月序数等于12(中气数),多则置闰,从上月序,不足则不闰。具体分析见下表示例。

判断有无中气,即对应j月的中气i在次月或i在上月且i+1气在j+1月。可以比较i中气及i+1中气与j及前后月朔的历日来确定。但可以发现一个性质,若中气出现在上月,则该月起的合朔次数必等于气数,不宜设闰,故而只需判断一项条件,即中气i进入到次月j+1时方可能有闰。

(证明中气在上月时起合朔次数等于气数:令气长为u,朔长为v,有32>u≥v>29,u-v<2.8。设i+1中气距离次年冬至共有m气,i+1月朔距离次年冬至朔共有m月或m+1月,由于冬至月必然有中气,则i+1气必然在雨水或其后,故0≤m≤10。易知vm <= um < vm + v。)

四、干支序月

月干支是根据节气判断,一年必然有12个节气,所以它的干支序是每5年循环一次。直接按干支计算,方法是先找任意一年大雪节气的干支,该年对60求余,以本年大雪干支去之,可得0年(公元前1年)的干支丙子,序12,故任意一年的岁首干支为该年加12,所在节气月的干支,则加上节气序再对60求余。也可考虑节气序与地支序是对应的,则可用上述方法计算天干再拼接为干支。

方法一:根据太阳历判断(程序所用方法):
节气日期与在太阳历中相对固定。由于每年节气数与公历月数相同,则每月的节气也是确定的,只需求该节气在月内的日期,每月内该日及以后的日期都为该节气干支,该日前的日期的月干支则为该节气前一干支。
但是,太阳历的岁长与回归年并非完全相等,现行格里历与回归年误差很小,但儒略历未考虑岁差因素,导致节气与月序的对应关系出现变化,需要处理。

方法二:根据太阴历判断:
节气序与地支对应,但不与月建对应,因为可能存在无节气月,所以判断节气月不能直接根据阴历月序处理。

地支
节气 大雪 小寒 立春 惊蛰 清明 立夏 芒种 小暑 立秋 白露 寒露 立冬

由于大雪不固定在冬至朔以后,可以从立冬开始查找。使用平气法,大致找到公历日期应在的节气,再用定气法比较实际所在节气,得到节气序,最后加上该年年首节气干支即可。

五、干支纪年

年的干支序按月从正月起算(或有按节气从立春起算)。正月是冬至起的第三个月,所以实际是比较从公历转换得到的农历月是否在寅月后,否即属于上一年。

计算年干支方法与节气干支类似,得0年(公元前1年)的干支庚申,序56,则任意一年干支可知。(或干支分开计算,庚申分别为6和8,以公历年份分别对干(10)支(12)数求余即可)。

农历置闰法示例

2033年虽然有无中气月但仅合朔12次,为了保证一年有12月,故不闰。

2034有2个无中气月,但由于合朔不会超过13次,至少有一个不闰,采取先出现无中气月先闰的原则。注意这个“先”从冬至月开始而非正月。

image

注:《清史稿·时宪志四》:“求闰月,以前后两年有冬至之月为准。中积十三月者,以无中气之月,从前月置闰。一岁中两无中气者,置在前无中气之月为闰。”

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 如果不注意,大概很多人认为“闰月”与“闰年”是一个意思,其实不是,虽说只是一字之差,所包含的意思却相差很远。 “闰...
    雨落未惊风阅读 8,073评论 1 1
  • 二十四节气是指二十四时节和气候。二十四节气是中国古代订立的一种用来指导农事的补充历法,是中国古代汉族劳动人民长期经...
    天马酒仙阅读 3,883评论 0 11
  • 生活中,我经常遇到很多分不清公历、阳历、农历、阴历的人,今天我们就来简单说一说关于日历的那些事儿,要说日历,就不得...
    观心道人冉立旭阅读 761评论 0 0
  • Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”。与 sync...
    心無旁騖丶阅读 740评论 0 2
  • 坐标:赣州 日出:6:44 日落:18:21 天气:阴 温度:9~15°C ❤️今日检视 3月的第一个工作日,上演...
    陈今_944阅读 175评论 0 1