在《时宪历》(公元1645年)之前颁行的历法中,均采用“平气法”。节气之间天数相同,为15又7/32天,推测节气的时间相对容易。<br><br>采用“定气法”之后,节气的时间推算则十分复杂。可通过万年历历书,亦可通过紫金山天文台发布的《中国天文年历》获得。通过《寿星天文历(V5.05Plus)》也能获得,有多处网站,比如:http://www.nongli.net/sxwnl/。<br><br>和荣历法网站https://github.com/hotoo/nong/wiki介绍的半解析方法,精度可达到分钟量级。该方法出至Jean Meeus编著《Astronomical Algorithms》一书(Willman-Bell出版社,1999,第二版),http://www.naughter.com/aa.html可以下载书中算法(C++程序语言)。网上有该书免费PDF版本,并且有其第一版的中文翻译《天文算法》PDF版本。<br><br>节气的间隔时间每年是近似固定不变的,在其平均间隔时间附近变化。由于太阳的回归周期约为365.24219天,节气(非闰年)时间比上一年延后约0.24219天。所以,只要已知某一年的节气日期和时间,就可以推出之后不远年份的节气日期。若精度只需要到日,可以通过下面经验、半经验公式获得。所有例外情况都列举在此,因此只需要对所列例外特殊处理即可。 <h1>经验公式</h1> 经验公式计算的是节气的“积日”。给定一个日期为基准日,之后的每一天与基准日的差值称为积日。比如,以 1900年1月0日为基准,那么1900年1月1日的积日就是1,以后的时间依次类推。设Y为公历年份,当年的第J个节气的积日公式如下:<br><br>T = [365.24219 (Y–1900) + C + 15.2184 J–1.939 sin(0.2618 J +δ)]<br><br>式中[…]表示对其中的数值取整数。J是节气(0到23)序数,0是小寒,1为大寒,3代表立春,等等;15.2184是节气之间平均间隔天数;C表示节气积日常数,以1900年为基准时等于6.218天;sin是正弦函数,1.939是正弦函数振幅;0.2618 是节气之间的角度差(15°),以弧度为单位;δ是角度修正值。因为岁差的缘故,在地球绕太阳公转轨道上的节气位置每年都会滞后, 大约每过70年就会推后一天。以1900年为基准时δ约等于0.055弧度。<br><br>根据经验公式可以推出1900年1月1日以后节气的积日,然后换算成节气的年月日。但是随着时间跨度增大,误差也就会逐渐变大。下面将经验公式简化为以每个世纪为基准,计算某年份在当年的节气积日D。不仅可以简化计算,还会提高节气日期推算的准确度:<br><br>D = [0.24219 Y + C –L + 15.2184 J–1.939 sin (0.2618 J +δ)]<br><br>简化经验公式中,Y是公历后2位数,C是节气世纪常数,L是之前年份(Y-1)的闰年天数。注意,需要考虑计算世纪起始年份的闰年情况,如21世纪的2000年是闰年。 下表是采用简化经验公式的计算结果,表中列举了所有例外情况。例外年份的节气,分别用年份+1或-1表示。比如,1982年小寒需要在计算结果上加1天,在小寒一行用1982+1表示; 2021年冬至需要在计算结果上减1天,在冬至一行用2021 -1表示。 20世纪:<br>C=6.218 δ=0.055<br> <br>月 节 序 例外<br>份 气 数<br>01 小寒 0 1982+1<br>01 大寒 1 1975+1<br>02 立春 2 1980+1<br>02 雨水 3 1956+1 1989+1<br>03 惊蛰 4 1981+1<br>03 春分 5 1985+1<br>04 清明 6<br>04 谷雨 7 1950-1 1983-1<br>05 立夏 8 1973-1<br>05 小满 9 1917-1 1979-1<br>06 芒种 10 1935-1 1997-1<br>06 夏至 11 1990-1<br>07 小暑 12 1987-1<br>07 大暑 13 1922+1 1984-1<br>08 立秋 14 1944+1<br>08 处暑 15 1925+1<br>09 白露 16 1927+1<br>09 秋分 17<br>10 寒露 18 1912+1<br>10 霜降 19<br>11 立冬 20<br>11 小雪 21 1912-1 1978+1<br>12 大雪 22<br>12 冬至 23 1951+1 1984+1 21世纪:<br>C=6.439 δ=0.022<br><br>月 节 序 例外<br>份 气 数<br>01 小寒 0<br>01 大寒 1 2082+1<br>02 立春 2<br>02 雨水 3 2059+1 2092+1<br>03 惊蛰 4 2047+1 2080+1<br>03 春分 5<br>04 清明 6<br>04 谷雨 7 2045-1<br>05 立夏 8 2035-1<br>05 小满 9 2070-1<br>06 芒种 10 2055-1 2088-1<br>06 夏至 11 2048-1<br>07 小暑 12 2016+1<br>07 大暑 13 2042+1<br>08 立秋 14 2002+1<br>08 处暑 15 2016+1<br>09 白露 16 2018+1<br>09 秋分 17 2037+1<br>10 寒露 18 2040+1<br>10 霜降 19<br>11 立冬 20 2027-1<br>11 小雪 21<br>12 大雪 22<br>12 冬至 23 2021-1 2087+1 22世纪:<br>C=5.649 δ=-0.007<br><br>月 节 序 例外<br>份 气 数<br>01 小寒 0 2188+1<br>01 大寒 1 2181+1 2185+1<br>02 立春 2 2149+1 2182+1<br>02 雨水 3 2125+1 2158+1 2191+1<br>03 惊蛰 4 2113+1 2146+1 2179+1<br>03 春分 5 2117+1 2150+1<br>04 清明 6<br>04 谷雨 7 2107+1<br>05 立夏 8<br>05 小满 9 2161-1<br>06 芒种 10 2175-1<br>06 夏至 11 2106+1 2197-1<br>07 小暑 12 2103+1 2194-1<br>07 大暑 13 2100+1<br>08 立秋 14 2122+1<br>08 处暑 15 2107+1 2169+1<br>09 白露 16<br>09 秋分 17<br>10 寒露 18 2135+1<br>10 霜降 19 2122-1<br>11 立冬 20<br>11 小雪 21 2114-1<br>12 大雪 22 2123-1 2189+1<br>12 冬至 23 2190+1 利用简化经验公式,其计算结果绝大部分是非例外情况,举例如下:<br><br>1942年秋分日期在9月24日:<br>[0.24219x42+6.218–[41/4] +15.2184x17-1.939 sin (0.2618 x17+0.055) ] = [267.00048] = 267<br><br>2058年立春日期在2月3日:<br>[0.24219x58+6.439–[1+57/4] +15.2184x2-1.939 sin (0.2618 x2+0.022) ] = [34.91662] = 34<br><br>2108年冬至日期在12月22日:<br>[0.24219x8+5.649–[7/4] +15.2184x23-1.939 sin (0.2618 x23-0.007) ] = [357.12464] = 357 表中列举了所有例外情况,比如:<div><br></div><div>1982年小寒日期在1月6日:<br>[0.24219x82+6.218–[81/4] +15.2184x0-1.939 sin (0.2618 x0+0.055) ] = [5.74421] = 5,需加1<br><br>2021年冬至日期在12月21日:<br>[0.24219x21+6.439–[1+20/4] +15.2184x23-1.939 sin (0.2618 x23+0.022) ] = [356.00869] = 356,需减1<br></div> <h1>通式寿星公式</h1> 上面的经验公式虽然简单,但是例外情况较多。所谓“通式寿星公式”是分别给出相应节气的参数C值,并且以每一个世纪为基准,故而其计算结果会相对少一些例外。<br><br>相应节气所在月份的天数 D= [0.24219 Y + C] - L<br><br>式中[…]表示对其中数值取整,Y表示公历年份后2位数,C是节气世纪常数,L是闰年天数。C值取决于世纪起始年份节气在所在月份的天数,参见21世纪2000年节气时间以及相应的天数: 节气 日期 时间 天数<br>小寒 01/06 09:00:42 5.375<br>大寒 01/21 02:23:03 20.099<br>立春 04/04 20:40:24 3.861<br>雨水 02/19 16:33:18 18.689<br>惊蛰 03/05 14:42:40 4.612<br>春分 03/20 15:35:15 19.649<br>清明 04/04 19:31:58 3.813<br>谷雨 04/20 02:39:30 19.110<br>立夏 05/05 12:50:10 4.534<br>小满 05/21 01:49:24 20.075<br>芒种 06/05 16:58:34 4.707<br>夏至 06/21 09:47:43 20.408<br>小暑 07/07 03:13:56 6.134<br>大暑 07/22 20:42:41 21.862<br>立秋 08/07 13:02:59 6.543<br>处暑 08/23 03:48:31 22.158<br>白露 09/07 15:59:10 6.666<br>秋分 09/23 01:27:35 22.060<br>寒露 10/08 07:38:13 7.318<br>霜降 10/23 10:47:28 22.449<br>立冬 11/07 10:48:04 6.450<br>小雪 11/22 08:19:20 21.346<br>大雪 12/07 03:37:02 6.150<br>冬至 12/21 21:37:26 20.900<br>小寒 01/05 14:49:16 4.617<br>大寒 01/20 08:16:18 20.344 日期是以1为基准的,又因通式寿星公式的计算结果要取整,所以C值是所在月份天数加1。但是,小寒、大寒、立春和雨水分别在一月、二月份,2000年是闰年,所以这4个节气在21世纪的C值不再需要加1。下面分别是通式寿星公式在20世纪、21世纪和22世纪的C值: 20世纪:<br><br>月 节气 C值 例外<br>01 小寒 06.12 1982 +1<br>01 大寒 20.84<br>02 立春 04.60 1980 +1<br>02 雨水 19.46 1923 -1<br>03 惊蛰 06.36 1981 +1<br>03 春分 21.42<br>04 清明 05.59<br>04 谷雨 20.89<br>05 立夏 06.32 1911 +1<br>05 小满 21.86<br>06 芒种 06.50 1902 +1<br>06 夏至 22.20 1928 +1<br>07 小暑 07.92 1925 +1<br>07 大暑 23.65 1922 +1<br>08 立秋 08.35<br>08 处暑 23.95<br>09 白露 08.44 1927 +1<br>09 秋分 23.83<br>10 寒露 09.10<br>10 霜降 24.21<br>11 立冬 08.21<br>11 小雪 23.08 1978 +1<br>12 大雪 07.90<br>12 冬至 22.66 1918 -1 21世纪:<br><br>月 节气 C值 例外<br>01 小寒 05.39<br>01 大寒 20.12 2082 +1<br>02 立春 03.87<br>02 雨水 18.73 2026 -1<br>03 惊蛰 05.63<br>03 春分 20.645<br>04 清明 04.81<br>04 谷雨 20.10<br>05 立夏 05.52<br>05 小满 21.04 2008 +1<br>06 芒种 05.675<br>06 夏至 21.37<br>07 小暑 07.105 2016 +1<br>07 大暑 22.83<br>08 立秋 07.50 2002 +1<br>08 处暑 23.13<br>09 白露 07.645<br>09 秋分 23.04<br>10 寒露 08.32<br>10 霜降 23.45<br>11 立冬 07.45<br>11 小雪 22.36<br>12 大雪 07.18<br>12 冬至 21.93 2021 -1 22世纪:<br><br>月 节气 C值 例外<br>01 小寒 05.67 2188 +1<br>01 大寒 20.39 2185 +1<br>02 立春 04.15<br>02 雨水 18.97<br>03 惊蛰 05.87<br>03 春分 20.895<br>04 清明 05.02<br>04 谷雨 20.31<br>05 立夏 05.71<br>05 小满 21.22<br>06 芒种 05.855 2175 -1<br>06 夏至 21.55 2197 -1<br>07 小暑 07.255 2103 +1, 2194 -1<br>07 大暑 22.98<br>08 立秋 07.675<br>08 处暑 23.31<br>09 白露 07.82<br>09 秋分 23.23<br>10 寒露 08.53<br>10 霜降 23.67<br>11 立冬 07.69<br>11 小雪 22.60<br>12 大雪 07.42 2189 +1<br>12 冬至 22.18 2190 +1 例如,2058年立春日期在2月3日:[0.24219x58+3.87]–[(58-1)/4] = [17.91702]–14 = 3<br><br>又如,1942年秋分日期在9月24日:[0.24219x42+23.83]–[42/4] = [34.000198]–10 = 24<br><br>再如,2108年冬至日期在12月22日:[0.24219x8+22.18]–[8/4] = [24.11752]–2 = 22 然而,因为地球在其天文轨道上还受到其它天体位置的影响,如行星和月球,所以节气之间的间隔时间每年都不完全相同,会有波动变化。因此,在节气的世纪起始时间相应天数的基础上,为了最大可能地减少例外,对上表中的C值做了修正。上表最后一列,是对C值修正后还存在的所有例外情况。比如,21世纪有如下节气例外:<br><br>2002年立秋在08月08日:<br>[0.24219x2+7.50]–[2/4] = [7.98438]–0 = 7<br><br>2008年小满在05月21日:<br>[0.24219x8+21.04]–[8/4] = [22.97752]–2 = 20<br><br>2016年小暑在07月07日:<br>[0.24219x16+7.105]–[16/4] = [10.98004]–4 = 6<br><br>2021年冬至在12月21日:<br>[0.24219x21+21.93]–[21/4] = [27.01599]–5 = 22<br><br>2026年雨水在02月18日:<br>[0.24219x26+18.73]–[(26–1)/4] = [25.02694]–6 = 19<br><br>2082年大寒在01月20日:<br>[0.24219x82+20.12]–[(82–1)/4] = [39.97958]–20 = 19 需要说明的是,通式寿星公式并不适合计算世纪起始年份的节气日期。原因有两个:一是世纪起始年份有可能是闰年,所以一月和二月份的节气需要加1才能如实反映日期,如21世纪的2000年就是闰年;二是因为,为减少节气计算例外,对世纪的C值做了修正。例如22世纪的大暑,2100年在7月23日00:23:24,为22.02天,相应的C值应当为23.02。但是,为了减少大暑在整个22世纪所有年份的例外情况,C值被修正为22.98。由于相应节气恰在午夜时间,修正后的C值就减少了1天时间。修正后的大暑C值,适合计算除初始年份(2100年)之外所有年份的大暑日期。<br><br>对于世纪起始年份的节气日期,可以用上一个世纪的C值进行计算。自然计算的年份不应当仅仅再是年份的最后两位数了,当为100年之差。21世纪大暑的C值为22.83,对2100年大暑的计算结果为:[0.24219x100+22.83]-[100/4]+[100/100]= [47.049]-25+1= [23.049]= 23。故2100年大暑日期为7月23日。其中,+[100/100]是从-[100/4]中扣除百年不闰的计算。 其实,也可以用本世纪的C值前推或后演上下世纪节气,只不过因为年份相差太远,误差会增大,例外年份可能比较多。比如用21世纪C计算20世纪或22世纪节气:<br><br>1912年冬至在12月22日:[0.24219x(–88)+21.93] – [ –87/4] + 1= [0.61728]+21+1 = 22<br><br>1912年立春在2月5日:[0.24219x(–88)+3.87] – [–87/4] +1+1 = [-17.44272] +21+2 = 5<br><br>2175年夏至在06月21日:[0.24219x175+21.37]–[175/4] + 1= [63.75325]–43+1 = 21<br><br>如果用本世纪C值进行计算,结果当然相同:<br><br>1912年冬至在12月22日:[0.24219x12+22.66] – [ 12/4] = [25.56628]–3 = 22<br><br>1912年立春在2月5日:[0.24219x12+4.60] – [1/4] = [7.50628] –2 = 5<br><br>2175年夏至在06月21日:[0.24219x75+21.55]–[75/4] = [39.71425]–18 = 21 • 用21世纪C值计算上一个世纪节气时,如1912年冬至,在式中加了+1,是为了修正2000年是闰年的。其它世纪如20世纪和22世纪,在计算它们的上一个世纪节气时则不需要,因为1900年,2100年都不是闰年。<br><br>• 用21世纪C值计算上一个世纪节气时,如1912年立春,在式中加了+1+1,除了需要修正2000年是闰年外,还要修正1912年是闰年。然而,同年的冬至则不需要,因为只有一月、二月节气在2月29日之前。<br><br>• 类似地,用世纪C值计算下一个世纪节气时,如遇到的下一个世纪年是非闰年,如2100年,也需要扣除计算。参见上面用21世纪C值计算2175年夏至的计算。<br><br>当第一项数值接近于整数时,表明节气时刻接近午夜零时。使用上表21世纪C值计算21世纪节气时,所有例外情况(与整数)的误差在(-0.023,+0.027)天之间。但是,使用上表21世纪C值计算20世纪节气和22世纪节气时,所有例外情况的误差则分别在(-0.068,+0.082)和(-0.079,+0.090)天之间。上表最后一列所列的例外情况,仅是用本世纪的C值计算结果。在计算前后世纪时的那些例外,没有在表中注明。所以,当第一项 []中的数值接近整数时,特别是在(-0.1,+0.1)之间时需要小心,其结果与实际情况可能相差1天。 参阅<a href="https://www.meipian.cn/2ll5ujq0?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《二十四节气》</a><br>参阅<a href="https://www.meipian.cn/2ll68ua7?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《定气法(上)》</a><br>参阅<a href="https://www.meipian.cn/2ll6cs3o?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《定朔望(上)》</a><br>参阅<a href="https://www.meipian.cn/3lx5id3t?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《定朔望(下)》</a><br>参阅<a href="https://www.meipian.cn/2ll6hu9b?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《历法编算》</a> 返回<a href="https://www.meipian.cn/2ll5kkhb?share_depth=1" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>《中国农历简介》</a>