日历的基本原理与算法
日历是以天文学的三个不同的周期作为基础的:
- 天:地球自转一周。
- 月:月球围绕地球运行一周。
- 年:地球围绕太阳运行一周。
如果以天作为单位,天文学的一年的平均时间是 365.2421896698 – 0.00000615359 T – 7.29E-10 T^2 + 2.64E-10 T^3 天,其中 T 的表达式为 (JD – 2451545.0)/36525,JD 是 Julian 天数。
日历的基本原理与算法
日历是以天文学的三个不同的周期作为基础的:
- 天:地球自转一周。
- 月:月球围绕地球运行一周。
- 年:地球围绕太阳运行一周。
如果以天作为单位,天文学的一年的平均时间是 365.2421896698 – 0.00000615359 T – 7.29E-10 T^2 + 2.64E-10 T^3 天,其中 T 的表达式为 (JD – 2451545.0)/36525,JD 是 Julian 天数。
如果以天作为单位,天文学的一月的平均时间是 29.5305888531 + 0.00000021621 T – 3.64E-10 T^2 天,其中 T 的表达式为 (JD – 2451545.0)/36525,JD 是 Julian 天数。
世界各国的日历都是以天作为最小单位,但是年和月的算法却各不相同,一共有 三大种类:
- 阳历:以天文年作为日历的主要周期,例如:中国公历。
- 阴历:以天文月作为日历的主要周期,例如:伊斯兰日历。
- 阴阳历:以天文月和年作为日历的主要周期,例如:中国农历。
中国公历算法
中国公历也就是世界通用的 Gregorian 历,它以年作为主要周期。为了和天文 年保持同步,公历使用两种不同天数的年:
- 常年:365 天。
- 闰年:366 天。
公历年一般都是常年,只有少数年是闰年,由下面三条规则确定:
- 一:如果年的数目是 4 的倍数,就是闰年。
- 二:但是,如果年的数目是 100 的倍数,规则一就无效,仍是常年。
- 三:但是,如果年的数目是 400 的倍数,规则二就无效,仍是闰年。
根据规则一,公历每 4 年就比天文年多 0.03124 天:
4 Gregorian years: 3 * 365 + 366 = 1461 days
4 tropical years: 4 * 365.2421896698 = 1460.9687586792 days
根据规则二,公历每 100 年就比天文年少 0.21897 天:
100 Gregorian years: 76 * 365 + 24 * 366 = 36524 days
100 tropical years: 100 * 365.2421896698 = 36524.21896698 days
根据规则三,公历每 400 年就比天文年多 0.12413 天:
400 Gregorian years: 305 * 365 + 95 * 366 = 146097 days
400 tropical years: 400 * 365.2421896698 = 146096.87586792 days
照此计算,公历每 2500 年就比天文年多出 1 天。
公历将一年分为十二个月。常年每月的天数分布如下:
月份 1 2 3 4 5 6 7 8 9 10 11 12
天数 31 28 31 30 31 30 31 31 30 31 30 31
闰年的二月为 29 天。
公历的月跟天文月毫无关系。
公历还有一个跟年和月毫无关系的周期,叫作星期,每星期七天。公历第一年的第 一天是星期一。
公历 400 年共有 146097 天,正好是 7 的倍数,所以星期和年每 400 年循环一 次。
中国农历算法
中国农历是阴阳历,同时跟天文月和天文年同步,所以中国农历算法极为复杂,比公历算法要复杂很多。
农历月的天数是一个变数,有时是 29 天,有时是 30 天。
农历每月的第一天是月亮全黑的日子。
农历年由 24 个节气来确定,节气则由太阳的角度来确定。农历的第一个节气叫 雨水,定在太阳的角度为 330 度的日子。其余的 23 个节气分别定在太阳的角度 每变化 15 度的日子。下面的表格列出了 24 个节气的名称和定义:
命称 角度 公历日期 周期
立春 315 2月 4日
雨水 330 2月19日 29.8天
惊蛰 345 3月 6日
春分 0 3月21日 30.2天
清明 15 4月 5日
谷雨 30 4月20日 30.7天
立夏 45 5月 6日
夏满 60 5月21日 31.2天
芒种 75 6月 6日
夏至 90 6月22日 31.4天
小暑 105 7月 7日
大暑 120 7月23日 31.4天
立秋 135 8月 8日
处暑 150 8月23日 31.1天
白露 165 9月 8日
秋分 180 9月23日 30.7天
寒露 195 10月 8日
霜降 210 10月24日 30.1天
立冬 225 11月 8日
小雪 240 11月22日 29.7天
大雪 255 12月 7日
冬至 270 12月22日 29.5天
小寒 285 1月 6日
大寒 300 1月20日 29.5天
24 个节气中有 12 个是主节气:雨水,春分,谷雨,夏满,夏至,大暑,处暑, 秋分,霜降,小雪,冬至,大寒。
农历年跟天文年相差较大。农历常年有十二个农历月,有 353,354,或者 355 天,比天文年少大约 11 天。为了跟天文年同步,每隔三个农历常年左右,必需设 一闰年。闰年有十三个月,添加的这个月叫闰月。
农历十二个月的名称分别为:正月,二月,三月,四月,五月,六月,七月,八 月,九月,十月,冬月,腊月。
农历闰年闰月的确定比较难,闰月农历算法有两条:
- 一:冬至必须落在农历冬月。如果落不上,腊月之前就要添上一个月,成为闰 年。
- 二:如果是闰年,冬月后边第一个不含主节气的月份定为闰月。闰月使用前一 月份的名称。
农历年以 60 年为一周期,每年的名称由 10 个天干的一个字和 12 个地支的一 个字排列而成。
10 天干为:
- 甲,乙,丙,丁,戊,己,庚,辛,壬,癸。
12 地支 为:
- 子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥。
- 12 地支有 12 动物生肖 与其对应:
鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪。
跟据历史记载,农历年已经经过了 78 个周期。今年,公历2010 年,是第 79 个周期的第 28 年,也就是农历第 4707 年。
总结起来,中国农历算法有下例 6 条规则:
- 月全黑规则 – 月全黑的日子是农历月的第一天。农历月周期由此而定。
- 24 节气规则 – 24 节气把天文年按太阳角度分成 24 等份,15 度一节气。 这个规则确定了农历和天文年的关系。
- 冬至规则 – 冬至必须落在农历冬月。如果落不上,腊月之前就要添上一个 月,成为闰年。
- 闰月规则 – 如果是闰年,冬月后边第一个不含主节气的月份定为闰月。
- 60 年周期 – 农历年以 60 年为一周期。
- 规则一和二的计算必须以中国南京紫金山天文台的观察为准。