国历农历转换
公历是太阳历。地球绕太阳一圈算一年,三百六十五天五小时四十八分四十六秒。人为切分成十二个月,一月大二月平三月大这样排下来。四年一闰补那多出来的零头。
农历不是纯阴历。月亮绕地球一圈算一个月,约二十九天半。十二个月加起来三百五十四天左右,跟太阳年差十一天上下。差着差着季节就乱了。今年春节在冬天,过些年能跑到夏天去。古代搞历法的人想出置闰法。十九年加七个闰月,把农历年拽回到太阳年的节奏里。
两边计时基准不一样。公历盯着太阳走,只管地球公转角度。春分秋分夏至冬至,每年落在公历三月二十、六月二十一、九月二十三、十二月二十二前后,误差顶多一两天。农历同时盯着月亮和太阳。初一必须看不见月亮,叫朔日。十五必须月亮圆,叫望日。立春雨水这些节气必须卡在太阳黄经的固定度数上。
节气是关键连接点。二十四节气严格按太阳位置划分,每十五度一个。立春太阳黄经三百一十五度,清明十五度,夏至九十度。这套系统本质上是个太阳历,套在农历框架里用。公历日期跟节气高度同步。清明永远是四月四日或五日,冬至十二月二十一二日。
转换算法核心就在这。查农历某天对应公历几月几号,先找该年春节的公历日期。正月初一最早一月二十一日,最晚二月二十日。然后数月份大小。农历月份大小不固定,连续两个大月或两个小月常有的事。闰月插在哪个月后面完全按节气定。没有中气的月份叫闰月。中气指雨水、春分、谷雨这类偶数节气。正月必须有雨水,二月必须有春分。某个月从朔日到下一个朔日之间一个中气都没沾着,它就当闰月,跟前一个月同名。
公历转农历麻烦些。给定一个公历日期,先定位到农历年。春节前归前一年,春节当天及以后归新一年。算出该公历日期距离当年春节多少天,再从正月开始一天天往下数。碰到闰月要判断是否已经在闰月区间内。大月三十天小月二十九天,减到剩余天数小于当月天数为止。
干过这活的人都知道麻烦在哪。公历规则简单,被四百年整除才是闰年,其余整百年不闰。格里高利历一改,一五八二年十月四日第二天直接跳到十五日。农历历史上改过几十次历法。颛顼历、太初历、大明历、授时历、时宪历,每套规则都不一样。明朝以前用平气法,二十四节气等间隔划分。清朝改用定气法,按太阳实际黄经度数定。现用农历规则基于紫金山天文台定气法计算。
具体查日期得靠万年历。手算不现实。朔望月平均二十九点五三零五九天,近点月、交点月一堆变量搅在一起。日月引力扰动让月球轨道偏心率不断变。农历月份安排要同时满足朔日、中气、置闰三条硬规矩。某些年份的闰月安排有多种可能方案,需要天文台提前推算公布。
民间记法简单粗暴。冬至在冬月,腊月在腊月。正月建寅,二月建卯,十二月建丑。地支纪月固定不变。甲子纪日六十天一循环,不受历法改革影响。从公元前两千多年到现在,六十花甲子一天没断过。公历只管七天一周,星期制跟历法系统没啥关系。
计算机处理转换靠查表。一九零零年到二一零零年农历数据做成数组存好。每个农历年存春节公历日期、闰月位置、大小月分布。查表比实时算快得多。天文算法程序写起来上万行代码,精度要求到秒级。
转换表里能看出规律。公历四月到十月之间,农历日期跟节气关联紧密。立夏小满芒种排着队来,差不了两天。冬季月份变动大,腊月有时二十九天有时三十天。腊八固定在腊月初八,公历在一月上旬乱跳。
公历农历没有简单公式换算。想用数学推导的都被天文实测数据打脸了。月亮运动方程高达一千多项,高阶项扰动积累几年就出现明显偏差。只能按观测结果逐年订正。
普通人记个大概就行。春节在公历一月二十到二月二十之间浮动。清明固定四月四五。中秋在九月下旬到十月上旬。知道这几个节点足够安排假期。
历法本质是妥协产物。公历迁就太阳年牺牲月份整齐。农历迁就朔望月牺牲年长稳定。两边转换就是在这两种妥协之间找对应。准不准另说,能用就行。
声明:五行查询网所有文章资源内容,除特别标注[原创]标识外,均为通过公开渠道采集的网络资源。侵权处理:如发现本站内容侵犯原著者合法权益,请通过以下方式提交书面通知:邮箱:yangming912@qq.com,要求:需提供权利人身份证明及侵权内容具体链接,处理时限:本站将在收到合规通知后72小时内处理。
