|
农历算法简介以及公式
有关农历的东西有以下几篇文章:
计算某天是星期几【C代码】
农历算法简介以及公式
农历中天干地支的计算【C代码】
农历一百年算法(1921~2021)【C语言代码】
农历两百年算法(1901~2100)【C语言代码】
一、节气的计算 先给节气进行编号,从近日点开始的第一个节气编为0,编号如下及其相应的月份如下:
|
0 小寒 腊月
|
6 清明 三月
|
12 小暑 六月
|
18 寒露 九月
|
|
1 大寒 腊月
|
7 谷雨 三月
|
13 大暑 六月
|
19 霜降 九月
|
|
2 立春 正月
|
8 立夏 四月
|
14 立秋 七月
|
20 立冬 十月
|
|
3 雨水 正月
|
9 小满 四月
|
15 处暑 七月
|
21 小雪 十月
|
|
4 惊蛰 二月
|
10 芒种 五月
|
16 白露 八月
|
22 大雪 冬月
|
|
5 春分 二月
|
11 夏至 五月
|
17 秋分 八月
|
23 冬至 冬月
|
把当天和1900年1月0日(星期日)的差称为积日,那么第y年(1900年算第0年)第x 个节气的积日是 F = 365.242 * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x) 这个公式的误差在0.05天左右。 二、朔日的计算 从1900年开始的第m个朔日的公式是 M = 1.6 + 29.5306 * m + 0.4 * sin(1 - 0.45058 * m) 这个公式的误差在0.2天左右。 三、年份的确定 1864年1月0日是农历癸亥年,所以用当年减去1864,用10除得的余数作为年份天干的,用12除得的余数作为年份的地支,数字对应的天干和地支如下。
|
数字
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
|
天干
|
甲
|
乙
|
丙
|
丁
|
戊
|
己
|
庚
|
辛
|
壬
|
癸
|
|
|
|
地支
|
子
|
丑
|
寅
|
卯
|
辰
|
巳
|
午
|
未
|
申
|
酉
|
戌
|
亥
|
当年的1月0日换算为积日,可以用年份减去1900得到的年数被4整除,所得商数作为 y(D4),余数作为y(M4),y(M4)为零的年份是公历闰年,积日是 D(1) = 1461 * y(D4) - 1 y(M4)不为零的年份是公历平年,积日是 D(1) = 1461 * y(D4) + 365 * y(M4) 四、月份的确定 计算前一年冬至的积日F(0),并用F(0)计算冬至所在的朔月m及其朔日M(0),就可以推算冬至的农历日期,冬至所在的农历月份总是十一月。计算下一个中气F(1)和下一个朔日M(1),如果F(1)<M(1),那么该月就是上一个月的闰月,并把这个中气作为F(2),以后的中气、朔日和农历月份也这样确定。
|