编 算 农 历

初稿: 2018年10月      最近一次重大修订: 2022年4月17日


本网站的农历涵盖年份是公元前722年至公元2200年,可分为七个时段:现代(1912年–2200年)、清朝(1645年–1911年)、西汉中叶至明末(前104年–1644年)、南明及明郑(1645–1683)、秦至汉初(前221年–前104年)、战国时代(前480年–前222年)及春秋时代(前722年–前481年)。每时段采用不同的方法计算农历,以下七节简单介绍这些计算方法。

下面用Ny表示年首最接近公历1月1日的中历年。例如N150指汉桓帝和平元年,始于公元150年2月15日,终于151年2月3日。


内容

  1. 现 代 (1912年 – 2200年)
  2. 清 朝 (1645年 – 1911年)
  3. 西 汉 中 叶 至 明 末 (前104年 – 1644年)
  4. 南 明 及 明 郑 (1645年 – 1683年)
  5. 秦 至 汉 初 (前221年 – 前104年)
  6. 战 国 时 代 (前480年 – 前222年)
  7. 春 秋 时 代 (前722年 – 前481年)

    备 注 和 参 考 文 献


现 代 (1912年 – 2200年)

这时段的农历根据《农历的编算和颁行》文件国标(编号GB/T 33661-2017)规定的方法编算(详情可参阅农历法则网页),计算结果与中国科学院紫金山天文台出版的书籍里的农历资料核对过。太阳和月球的地心位置用美国喷射推进实验室(Jet Propulsion Laboratory)编制的DE431DE431历表计算。注一 喷射推进实验室的DE系列历表用数值积分方法计算太阳系行星及月球的位置,是目前世界上最准确的历表之一,计算时考虑到343个质量比较大的小行星对大行星的重力摄动。太阳系各天体的运动计及广义相对论对牛顿力学的修正,广义相对论的效应以参数化后牛顿n体度规推出的动力学方程描述。此外还计及地球、月球、及太阳因偏离完美球状而引起的额外加速度。用DE431历表计算出的地心位置经过光行时及光行差的修正后,得到的是国际天球参考系(ICRS)的地心座标视位置,再经过参考架偏差矩阵(frame bias matrix)以及岁差和章动的变换后算出地心视位置相对于瞬时黄道及真春分点的黄道座标。岁差采用Vondrák等人于2011年建立的岁差模型Vondrák计算。章动根据国际天文联会推荐的IAU2000A章动模型计算,计算公式取自国际地球自转和参考系服务规范(IERS Conventions)在2010年发布的文件IERS10和美国海军天文台在2005年发布的文件Kaplan。月相和节气的质心力学时(TDB)时刻用牛顿-拉弗森(Newton-Raphson)求根法计算,所得的TDB时刻再转换成UTC+8(1972年及以后)或UT1+8(1972年前)时刻。换算过程中省略了TDB到地球时(TT)的转换,因为两者差异小于0.002秒,可视为等同。TT到UT1的转换公式取自Stephenson等人(2016)及Morrison等人(2021)的拟合公式SM16,1972年到现在的TT-UTC根据正式公布的闰秒计算,2024年后的TT-UTC根据Stephenson等人(2016)及Morrison等人(2021)的外推公式计算,其实他们的公式是用来预推TT-UT1的,但是也可用来作TT-UTC的近似值,因为根据规定UTC和UT1相差不会超过0.9秒。我已把本网站编算农历时详细的数学计算写在这pdf文件供有兴趣的读者参阅。

本网站以前用国际天文联会推荐的IAU2006模型计算岁差,现在改用Vondrák等人的岁差模型,原因是IAU2006模型只适用于公元2000年前后一千年左右,以前本网站载的农历年限是公元1841年至2200年,用IAU2006模型没有问题。现在本网站的农历年限是公元前722年至公元2200年,虽然古代的农历根据实历,但是年历网页仍载有用现代方法计算当时合朔和二十四节气的UT1+8时刻以供参考,因此IAU2006模型便有所不足。Vondrák等人的新岁差模型有效年限是公元2000年前后二十万年,我比较过用Vondrák等人的模型和IAU2006模型计算出的月相和二十四节气的时刻,发现在1600年至2500年间,两岁差模型的二十四节气时刻偏差不超过0.19秒、月相时刻偏差不超过0.00038秒,因此IAU2006模型与Vondrák等人的新模型在这时段可视为等同。

用以上方法编算的农历与两本历书比对过,一本是中国科学院紫金山天文台编的《新编万年历(修定本)》新编万年历,另一本是刘宝琳编的《100年袖珍干支月曆》刘宝琳。《100年袖珍干支月曆》的编者刘宝琳曾是紫金山天文台的研究员,编该书时已从事历算工作近四十年,并曾以紫金山天文台的名义出版了多种历书,《新编万年历》也是由他主编的。《新编万年历》的年限是从1840年(道光二十年)到2050年,《100年袖珍干支月曆》的年限是从1911年到2010年。两本书的农历资料是一致的,只是《100年袖珍干支月曆》还把朔、望和二十四节气的时刻列出到分钟。两本书中1912年到1928年的农历根据北洋政府教育部中央观象台编的《中华民国历书》,1929年到1948年的农历根据中华民国中央研究院天文研究所编的《国民历》注二,1949年及以后的农历则根据紫金山天文台编算的农历。

本网站编算的这时段农历与两本书所载的资料大多一致,遇到农历初一的日期不一致时就以两本书的资料为准。不一致的情况有三次而且都是发生在1929年以前。在这些不一致的情况,合朔的时刻仍然用我的计算,只是农历初一的日期改了。除了朔日的日期有差异外,二十四节气的日期有时也有差异。除了一项外,所有的差异也都是发生在1929年以前。下表把所有的合朔和二十四节气的日期差异列出来。


农 历 年农 历 月初 一 的 公 历 日 期*合 朔 时 刻 (UT1+8)
N1914 癸 丑 年十 月1914年11月17日1914年11月18日 00:02
N1916 丙 辰 年正 月1916年2月3日1916年2月4日 00:05
N1920 庚 申 年十 月1920年11月10日1920年11月11日 00:05

* 初一的日期根据当时政府颁行的日历。


公 历 年节 气本网站计算的节气时刻(UT1+8)当时政府颁行的日历
1912小雪11月22日 23:4811月23日 00:39
1913秋分9月23日 23:539月24日 00:48
1917大雪12月8日 00:0112月7日 23:47
1927白露9月9日 00:059月8日 23:52
1928夏至6月22日 00:066月21日 23:53
1979大寒1月20日 23:59:541月21日 00:00

1914年以前的差异主要是因为当时的计算方法根据乾隆七年(1742年)编成的《历象考成后编》,《历象考成后编》成书时还算先进(见下一节),现在看来是很不准的,而且当时用北京地方视时。用《历象考成后编》推算的时刻可以有几分钟至几十多分钟的误差。自1914年起历法计算采用国外新方法,改北京地方视时为北京地方平时(UT+7:46),与东经120°地方平时有十四分钟偏差,这就是1914年、1916年、1917年、1920年、1927年和1928年出现日期差异的原因,1929年起改用东经120°平时(UT+8)(UTC要到1960年代才创立)后鲜有差异。至于1979年的情况比较特殊,我据DE431历表推算的大寒时刻在1月21日零时之前六秒,《100年袖珍干支月历》和《一九七九年中国天文年历》载的时刻是00:00(用《一九七九年中国天文年历》的太阳表数据算出的时刻是00:00:12),可见大寒时刻非常接近午夜零时,要用很准确的历表才能把确实日期算出。1984年以前,世界上大多数的天文年历(包括紫金山天文台编的《中国天文年历 》)是根据1895年美国天文学家西蒙‧纽康(Simon Newcomb)编的太阳表计算太阳位置,纽康太阳表的精确度约为1",所以用其计算的二十四节气时刻可以有25秒的误差。《100年袖珍干支月曆》的节气计算可能也是用类似精度的太阳历表计算,因为书中所列的节气时刻和我推算的时刻常有一分钟偏差,而这样的偏差不见于紫金山天文台编的《2015年中国天文年历 》,其实这也不奇怪,因为《2015年中国天文年历 》用DE421历表计算太阳位置,DE421和DE431在近几十年的差异十分微少。不管怎样,这些二十四节气的日期虽然相差一天,但是并没有影响农历月份的编排,我在本网站相关的网页用红色字形指出了这些差异。

农历法则网页提到数十年后的合朔和二十四节气的UTC+8时刻现在暂时不能准确计算,有若干合朔和节气的预推时刻接近午夜零时,所以确实日期可能和预推日期有一日之差。合朔日期可能有一日之差即意味着预推的农历初一日可能有一日之差。至于二十四节气的情况比较简单,因为节气有一日之差完全不影响农历月份的编排,中气有一日之差也大多无碍,除非初一日恰好发生在这个中气的一两日内,这种特殊情况如果出现或会影响闰月及其他月份次序。我的计算显示这种特殊情况直到2200年也不会发生。下表列出2050年后预推时刻接近午夜零时的合朔和二十四节气,因此确实日期或会和预推日期有一日之差。这些情况在本网站的相关网页用红色字形注明。


公 历 年合朔的预推时刻(UTC+8)
20579月29日 00:00:40
20899月4日 23:59:11
20978月8日 00:02
21152月24日 23:59
21165月12日 23:59
21339月29日 00:02
216512月4日 00:00:29
217210月18日 00:01

公 历 年节 气预 推 时 刻 (UTC+8)
2051春 分3月20日 23:59:19
2083立 春2月3日 23:59:27
2084春 分3月20日 00:00:35
2114小 雪11月22日 23:58
2142白 露9月8日 00:00:11
2155霜 降10月23日 23:58
2157冬 至12月21日 23:59
2183春 分3月20日 23:59:46
2186立 春2月4日 00:02

清 朝 (1645年 – 1911年)

清朝历法的编算法则和现在的基本上一致,只是时间用北京的地方真太阳时,而不是东经120°区时(即UT1+8)。本网站对这时段的历日先用现代方法编算,然后与实历核对把不一致的历日改正。历日资料是根据《新编万年历》新编万年历和《三千五百年历日天象》张培瑜97。《新编万年历》在1912年前的日历根据北京故宫博物院收藏的《大清时宪书》,但是该书只载有1840年后的农历。《三千五百年历日天象》里的农历资料是作者张培瑜根据史载古代历法的编算法则复原当时历法,并与存世的历日资料核对过,书中前言说近400多年的历书根本上完整地保存了,所以书中至少在明朝中叶以后的历日应是大部份符合当时颁行的日历,而我也检查过书中至少在1840年至1911年的历日资料与《新编万年历》一致。

比较实历与用现代方法编算的农历,发现这时段有二百多处不一致。虽然要作二百多项修改,总好过把资料用手一一输入。造成这些差异原因除了是所用的时间不同外,还与当时的计算方法不够准确有关。

2020-12-12 更新: 造了时宪历日月位置及节气和月相时刻的在线工具,或可供研究清朝天文学史的学者参考。

清朝的历法基本上用明末制定的《崇祯历书》。明朝末年,钦天监推算的日月食有三次与实际天象相差颇大,崇祯皇帝接纳改历建议,命徐光启组织历局研究改历。徐光启主张采用欧州传教士传入的西方天文学计算历法,历局先后聘请耶稣会义大利传教士龙华民(Nicholas Longobardi)、德国传教士邓玉函(Johann Schreck)、义大利传教士罗雅谷(Giacomo Rho)、德国传教士汤若望(Johann Adam Schall von Bell)等人参与改历工作,五年后于崇祯七年十一月编译成一百三十七卷的《崇祯历书》。由于遭到守旧派的阻挠,新历法迟迟未有实行。在《明史‧历志》中记录了发生过八次中西天文学的较量,包括日食、月食、木星、水星、火星的运动,结果是西法以八比零击败中法大获全胜。崇祯帝深知西法之密,于崇祯十六年(1643年)八月下定颁布新历的决心,但颁行《崇祯历书》的命令还没有实施,明朝就已灭亡。

顺治元年(1644年)五月满清入关后,摄政王多尔衮听说西洋新历法精湛,召汤若望入朝问新法之事,不久决定采用。汤若望将《崇祯历书》删改压缩成一百零三卷,更名为《西洋新法历书》。顺治二年(公元1645年),清政府正式颁行依新历法编算的《时宪历》。新历法采用定气法计算二十四节气,打破了二千多年来一直沿用的平气法。日月五星的计算采用第谷‧布拉赫(Tycho Brahe)的系统。

康熙五年(1666年)至八年(1669年)因历狱而复用明朝《大统历》,二十四节气改回平气。清朝历算家汪曰桢在其《历代长术辑要》说清钦天监后来编的《御定万年书》(乾隆年间编成,后来多次续修延长年限)在这几年的二十四节气日期仍用定气,系后来以新法追改之故。郑鹤声《近世中西史日对照表》郑鹤声的二十四节气日期采用《万年书》的数据,所以也与实历不符,查张培瑜《三千五百年历日天象》也发现其二十四节气日期是定气,亦与《近世中西史日对照表》的资料一致。本网站在这几年提供两套历书节气:其一取《三千五百年历日天象》的数据,此乃根据西洋新法追推的定气;另一套历书节气根据《大统历》推算。至于朔日,依明朝《大统历》和依《西洋新法历书》计算结果在这几年的日期完全一致,只是由于节气日期的差异使康熙八年和九年的置闰出现分歧:依《大统历》康熙八年闰十二月,依《西洋新法历书》则在康熙九年闰二月。这情况史书也有记载:康熙八年三月,比利时传教士南怀仁(Ferdinand Verbiest)受任钦天监监副治理历法,指出按旧法推出的闰十二月不妥,按新法置闰当在明年二月。康熙帝命礼部详查此事,钦天监官员多支持南怀仁,于是下诏「罢康熙八年十二月闰、移置康熙九年二月。其节气占候、悉从南怀仁之言」(《康熙朝实录‧卷二十七》)。由此可知《大清康熙八年岁次己酉时宪历》有两个版本,一是以旧法推算,一是以西洋新法推算。

2024年5月更新: 台湾国立故宫博物院的清代档案检索系统藏有若干康熙初年的《大清七政经纬躔度时宪历》,其中康熙五年所载的节气日期和时刻符合《西洋新法历书》的推步,康熙六年至八年则符合大统历的推步。未知是康熙五年复用大统历这资料有误,还是那本康熙五年的七政历是决定改历前印的刊本。

《西洋新法历书》中有图与表不合的情况,而且有很多隐晦难晓之处。清政府于康熙五十三年(1714年)开始修订《西洋新法历书》,在康熙六十一年(1722年)完成了《钦若历书》,雍正年间更名为《历象考成》。此书以康熙帝的名义御制,康熙帝有意摆脱传教士对历算的控制,在畅春园蒙养斋创建了算学馆,招揽人才研习西方的数学和天文学及编撰书籍,《历象考成》就有很多中国学者参与编写,书中也加入了一些中国学者的研究成果。《历象考成》成书后,算学馆里中国学者认为他们已掌握了西方的天文历算,开始挑战传教士对历算的领导地位,有人提出钦天监不应再由西洋人把持。其实他们对当时西方天文学的进展一无所知,《历象考成》仍然沿袭第谷的体系,不但已落后于当时西方的天文学,而且因年代日久而误差渐大。雍正八年(1730年)六月初一发生日食,这是《历象考成》成书后首次在京师可见的日食。钦天监监正戴进贤(Ignatius Köler)和监副徐懋德(Andreas Pereira)为了显示他们的历算权威仍无可取代,趁这次日食指出《历象考成》的预报与观测有微小偏差,钦天监满洲监正明图上奏说若不及时修理历法恐愈久愈差。于是戴进贤和徐懋德奉命修订历法,他们根据法国天文学家乔凡尼‧卡西尼(Giovanni Cassini)及德国传教士格拉马迪库思(Nicasius Grammaticus)的计算方法和数据制定了一份日躔、月离表,即太阳和月球运动表。他们把表格附在《历象考成》诸表之末,既没有说明制表之依据,也不说明使用方法,钦天监中只有戴进贤、徐懋德及(食员外郎俸五官正)蒙古人明安图三人懂得使用新表,情况很不寻常。唯恐历法久而失传,协辨吏部尚书顾琮于乾隆二年奏请增补图说,于是清政府组织人员重修《历象考成》,于乾隆七年(1742年)编成《历象考成后编》。书中摒弃了第谷体系,引进开普勒第一和第二定律,不过椭圆的焦点是地球而不是太阳,这在具体计算上得出的结果是相同的。月球的运动源自牛顿的月亮模型,这模型结合了开普勒定律、英国天文学家霍罗斯(Jeremiah Horrocks)的椭圆心转动模型和牛顿用其万有引力理论推出的若干修正项。Cook, Kollerstrom

由于用第谷体系计算的历法不够准确,二十四节气的日期和用现代计算的常有差异,所以在年历网页里在清初仍然列出历书节气的日期,即按当时《时宪历》计算的日期。改用开普勒定理计算历法后,节气日期差异大大减小,因此在1733年后除了那些历书节气与现代计算有差异外,其余略去不注。至于合朔,朔日就是每月的初一日,本网站的古代农历日期全部依当时的历法,不用另外注明历书朔日。

《时宪历》打破传统用定气法计算二十四节气后,置闰法则出现了一些问题,以前一直沿用的无中气置闰法不能再用,因为在一岁内可能会出现两个无中气的月份。明末历局在研究历改时已注意到这个问题,当时的历局官员李天经主张按中气时刻在合朔时刻先后来决定其所属之月份。如果有中气和合朔发生在同一日,根据传统中气属于这个月的初一日,但李天经主张要考虑中气的时刻在合朔时刻之前还是之后,如果在合朔之后,则属这个月,如果在合朔之前,则属前一个月。这新法则能应付几乎所有因采用定气法而出现的置闰问题。顺治二年(1645年)首次用新法编历,《顺治二年岁次乙酉时宪历》所载的中气大暑出现在闰六月初一,违反了闰月不含中气的规定。汪曰桢在其《历代长术辑要》解释说虽然大暑与朔发生在同一日,大暑的时刻早于合朔时刻,属于前月之中气,所以闰六月不含中气。这与李天经的说法一致。但是这新法则只在顺治二年用过,以后不再使用。比较顺治二年以及以后的闰月安排,显示当时还没有完全确立对于采用定气后的置闰法则。《清史稿》明确说明时宪历最终采用的置闰法则:「求闰月,以前后两年有冬至之月为准。中积十三月者,以无中气之月,从前月置闰。一岁中两无中气者,置在前无中气之月为闰。」注四这就是农历法则网页所列的法则五。不取李天经之法,可能是因为传统的无中气法已能处理大多数的闰月。平岁有无中气之月或闰岁有两无中气之月毕竟罕见,只须稍修改无中气法便可解决问题。如果用李天经之法,就会出现顺治二年的情况,即把本来无中气法能处理的情况也改得不合传统。采用定气法计算二十四节气已使守旧派十分不满晓庵新法,如果再用李天经之法必然会引起更多争议。


西 汉 中 叶 至 明 末 (前104年 – 1644年)

在这一千七百多年间,在中国行用的历法多达四十部以上,计算方法和现代的大有不同,如果要一一追寻各历法的计算方法然后核对计算结果就会很费时,所以本网站直接采用《三千五百年历日天象》张培瑜97的数据。核对资料时发现该书在这段期间有四十多处错误,其中大部分已被寿星天文历的创始人许剑伟指出,现将已发现的错误在此网页列出。此外,《三千五百年历日天象》在汉武帝太初元年(公元前104年)至汉章帝建初九年(84年)间列出的二十四节气按《汉书‧律历志》的次序,即惊蛰在雨水之前、谷雨在清明之前;在建初九年之后则按《淮南子‧天文训》的次序,即和现在通行的次序一致。《淮南子》成书于公元前139年(汉武帝建元三年)左右,《汉书》则书于公元90年左右(汉和帝年间),可见二十四节气的次序在东汉时还没有完全确定。为了避免混淆,本网站不跟从《三千五百年历日天象》,二十四节气一律按《淮南子‧天文训》的次序。

本网站从汉武帝太初元年(公元前104年)五月起用《三千五百年历日天象》的数据,五月前用一套汉初历法的复原法计算(见第5节)。

从汉武帝太初元年至明末这一千七百多年间,有几件事值得注意:

  1. 发生了四次改正朔事件:

    • 公元9年,王莽建立新朝,改正朔以殷正建丑(即现在的十二月)为年首,故N8(戊辰年)只有十一个月。农历月的数序是:建丑为正月、建寅为二月等等,与现在通用的月序相差一个月。新朝于地皇四年(癸未年,公元23年)亡,绿林军拥立汉淮南王刘玄为帝,改元更始元年,恢复以建寅(即现在的正月)为年首。地皇四年和更始元年有十一个月重叠。地皇四年用丑正、更始元年用寅正,所以地皇四年二月相当于更始元年正月、地皇四年三月相当于更始元年二月……地皇四年十二月相当于更始元年十一月。
    • 魏青龙五年(丁巳年,N237),魏明帝改正朔,以殷正建丑(即现在的十二月)为年首,二月后实施,并改元景初元年。所以N237丁巳年没有三月份,二月后的月份是四月。农历月的数序是:建丑为正月、建寅为二月等等,与现在通用的月序相差一个月。景初三年(N239)明帝驾崩,次年恢复以建寅(即现在的正月)为年首。景初三年有两个十二月(建子和建丑)。另外,青龙五年正月开始使用新历法,使青龙四年十二月只有二十八日。
    • 公元689年12月,武则天改正朔,以周正建子(即现在的十一月)为年首,建子改称正月,建寅(即现在的正月)改称一月,其他农历月的数序不变(即正月、十二月、一月、二月⋯⋯十月)。公元701年2月又改回以建寅为年首。N689(己丑年)只有十一个月(其中一个月是闰月),而N700(庚子年)有十五个月(其中一个月是闰月)。
    • 公元761年12月,唐肃宗改正朔,以周正建子(即现在的十一月)为年首,建子改称正月、建丑(即现在的十二月)改称二月、建寅(即现在的正月)改称三月等等,与现在通用的月序相差二个月。公元762年4月又把农历月的数序改回以建寅为正月、建卯为二月等。N761(辛丑年)只有十个月,而N762(壬寅年)则有十四个月,其中有两个四月(建卯和建巳)和两个五月(建辰和建午)。
  2. 从汉武帝太初元年至明末这一千七百多年间,中国有时处于分裂局面,有多个政权并存,行用的历法也不尽相同。我花了一些时间涉猎了其中二十部古代历法,成功计算了665年以前以及822至892年和1281年至1644年的日历,619年以前的日历几乎完全符合《三千五百年历日天象》的数据,619-665、822-892和1281-1644年的日历也大部分和《三千五百年历日天象》一致。撑握了这些历法的推步后就着手编制分裂时代诸国的日历。

    《三千五百年历日天象》附表2到附表4载有分裂时代诸国的朔闰异同表,书中前言说附表的数据参照清朝历算家汪曰桢编的《历代长术辑要》。为了方便核对我的推步结果,我用计算机编制了依该书附表格式的三国南北朝时期的朔闰异同表,发现我的推步结果只有几处与该书的附表不合。其中有三例是该书的附表与正文的数据不合,我的推步符合正文。由于我不是历史学专家,无从判断孰是孰非,所以只注明这些矛盾的资料。对于其余几处差异,我比较了台湾中央研究院的两千年中西历转换网站和汪曰桢编的《历代长术辑要》,有四处这些资料和《三千五百年历日天象》一致,于是就修改我的数据,但有四处《三千五百年历日天象》的数据与《历代长术辑要》或两千年中西历转换网站不一致,所以不取该书的数据。

    我本来也想自行编算辽金元三朝的日历,但是遇到了困难。辽初用后晋司天监马重绩的《调元历》,辽圣宗统和十二年(994年)改用贾俊的《大明历》,到金天会十五年(1137年)改用司天杨级的《大明历》,金大定廿二年(1182年)又用赵知微的《重修大明历》。《调元历》和贾俊的《大明历》已失传,元朝史官修《辽史‧历象志》时不知贾俊《大明历》的内容,竟然说是几百年前祖冲之的《大明历》,然后转抄了《宋书》所载祖冲之的《大明历》!对于这两部已失传的历法,汪曰桢用他认为相近的历法替代。《历代长术辑要》以《宣明历》替代《调元历》;以金赵知微的《重修大明历》替代贾俊的《大明历》,然后根据《辽史》调整闰月。查看《三千五百年历日天象》附表4的宋辽金元朔闰异同表,发现这时期南北两朝的历日差异不大。与其效法汪曰桢先用他历计算然后调整历日,不如直接采用附表4的数据,结果是计算辽金元日历的 JavaScript 程式及所需的 JSON 数据加起来比三国和南北朝的日历计算还要简洁。这等同於先用南朝的历法计算然后调整历日用于北朝,复杂的计算其实隐藏在南朝的历法计算中。附表4没有载辽金元历法的二十四节气,年历网页的辽金元历书节气须要另外计算,计算方法在宋辽金元朔闰异同表网页表末的备注简略叙述。

    综合分裂时代的历法计算,年历网页加了三国时蜀和吴的年历;十六国时加了后秦和北凉的年历;南北朝时加了北魏、东魏、西魏、北齐、北周及隋朝灭陈前的隋朝年历;五代末年和宋朝时加了辽、金、蒙古和元朝灭宋前的年历。只要输入分裂时代的公历年,便有按键选择分裂时代的王朝。朔闰表网页年号网页也加了这些王朝的朔闰表和纪年表。

  3. 在学习明朝《大统历》的气朔推步时,发现了《三千五百年历日天象》、薛仲三和欧阳颐的《两千年中西历对照表》、陈垣的《二十史朔闰表》及汪曰桢的《历代长术辑要》在明朝竟然至少有七个朔日错误,现已撰「明朝《大统历》的定朔计算及历表朔日订正」详细说明,并根据现存明朝《大统历》历书改正了本网站明朝的七个朔日资料。

  4. 中国的历法在这段期间频频更改,公历却相当稳定,只有一次重大的改革,即1582年的格里高里历改,1582年前公历用儒略历,凡能被四整除的年份是闰年,平年365日,闰年366日,一年的平均日数是365.25日,比回归年长0.0078日,积128年就有一日偏差,这使春分日期在儒略历不断推前。复活节是西方重要的宗教节日,复活节的日期在公元325年确立,取春分月圆后的第一个星期日,但是「春分」和「月圆」不用天文学的定义,而是用近似值。计算复活节时「春分」当时定为儒略历的3月21日,因为这是当时春分在儒略历的近似日期,「月圆」则定为教会历(ecclesiastical calendar)某月的第十四日。教会历是一种阴阳历,历法的朔望依默冬章(Metonic cycle)计算,即假设235个朔望月等同于19个回归年,这也是中国古代十九年七闰法的依据。但是235个朔望月(6939.688日)比19个回归年(6939.6075日)长0.08日,积久渐差。历法之回归年及朔望月偏差使春分日期在儒略历的日期不断提前,天文学上月圆之日亦渐渐偏离历法的月圆日。到了十六世纪末,春分日期已移到3月11日,望日也比历法推算的月圆日早了四日,历法「失天」的情况引起学者对复活节计算方法的争议,并要求改历。于是教皇格里高里十三世在1582年宣布改历,把当年10月4日之下一日定为10月15日,跳了十日使春分的日期回到3月21日,并规定在四百年中减去三个闰年,具体方法是凡公历年是4的倍数但不是100的倍数(例如2016年)都是闰年,如果公历年是100的倍数但不是400的倍数(例如1900年)就不闰,如果公历年是400的倍数(例如2000年)则闰。这就是现在行用的格里高里历,其一年平均日数是365.2425日,颇接近回归年的数值365.2422日,积3300年才有一日偏差。历改也修改了朔望的计算,使算出的朔望日在较长时间内不偏离真实的朔望日。然而只有义大利、西班牙、葡萄牙、法国、波兰、低地国家及这些国家的殖民地在1582年遵从教皇指示改用新历,基督新教及东正教等国家起初抵制新历,后来陆逐采用。希腊于1923年才改用格里历,是最迟采用新历的欧洲国家。虽然西方国家并不是都在1582年改用格里历,这里遵从惯例在1582年10月15日起改用格里历纪日。注三

  5. 儒略历是罗马共和国独裁官儒略‧凯撒(Julius Ceasar)采纳埃及亚历山大的希腊天文学家索西琴尼(Sosigenes of Alexandria)计算的历法,在公元前45年1月1日正式使用。凯撒不久被杀,而儒略历在最初36年执行上出现了置闰错误,本来应该每四年一闰却变成每三年一闰,到了公元前8年才決定糾正错误。由于已多闰了三次,于是在其后十二年间停闰三次,到公元8年才恢复正常的闰年。

    近代学者陈垣在其著作《二十史朔闰表》和《中西回史日历》在公元元年开始注有公历日期,采用古罗马历法,公元4年停闰,因此公元元年至3年的日期与现行各国历表都相差一日。上面提到的兩千年中西曆轉換网站也是在公元4年停闰。张培瑜对这做法不以为然,他在《三千五百年历日天象》前言指出公历纪年不是古罗马人在公元元年所创,而是后人在六世纪时创立的,对之前的纪年全部用逆推。西方各国的古代历法也是十分混乱,创立公历纪年纪日的目的就是为了将各国历法转换成统一的纪日系统以方便研究历史,所以不应该将古罗马历的混乱情况带到公历。我赞同张培瑜的见解,本网站的公历在公元8年以前也是用逆推的儒略历(proleptic Julian calendar),不考虑古罗马历的置闰错误,也不考虑2月和8月的日数可能更改过。这也是现代西方学者一般采用的纪年纪日法。

  6. 公历月名的英文是January, February, March, April, May, June, July, August, September, October, November和December,中文一般意译为1月、2月……12月等,但是从January到August的八个月名其实和月序无关,September至December则是七月、八月、九月和十月的意思,这是因为古罗马历本来以March作为一年的起始月,十二个月中只有前十个月有月名: March, April, May, June, Quintilis, Sextilis, September, October, November 和 December,最后两个月没有月名。March, April, May, June来自战神玛尔斯(Mars)、花开之月(又一说是来自美丽女神阿佛洛狄忒Aphrodite)、女神玛雅(Maia)及女神朱诺(Juno),Quintilis至December是五月至十月,后来最后两个月得名January(守护神雅努斯Janus)和February(源自古代净化心灵及忏悔的节日)。约公元前八世纪与前二世纪之间,罗马历的起始月由March改为January。公元前45年的儒略历改并没有更改月序,但是为了纪念儒略‧凯撒(Julius Ceasar)和罗马帝国开国君主奥古斯都‧凯撒(Augustus Ceasar),将其中两个月份改用他们的名字:公元前44年Quintilis更名为July(儒略月)、前8年Sextilis更名为August(奥古斯都月),变成了今天的月名。

    虽然January第一日在罗马历很早就定为一年之始,但是某些欧洲国家虽然后来也采用儒略历或格里历,可能因各地传统不同他们以前不一定取January首日为年首。例如某国家以前可能以March的第一日作为年首,另一国家以前或以March的第25日(接近春分日)为年首,又另一国以前或以December的第25日(接近冬至)为年首等。史学家有时会用双重纪年纪日来记事,例如"10/20 February 1661/62"表示日期是February的第十日(儒略历)或February的第二十日(格里历),年份是1661年或1662年,视乎用何日为年首。这情况类似中国的分裂时代,各政权各自颁历,因此年首和日期也不尽相同。所以用统一的纪年纪日对研究历史很有用,本网站的公历依惯例一律以January第一日为年首,月份的英文名一律用现在通行的月名,中文一律译为1月、2月、3月……12月,为避免混淆,这里的公历月名用阿拉伯数字,中历月名则用汉字。如前述,1582年10月15日起用格里历,公元8年至1582年10月4日用儒略历,8年前则用逆推儒略历(proleptic Julian calendar)。

    据说很多华人以西方月名来译农历的月名,例如以June来译农历六月,使一些西方人士感到困惑,不知道是在说公历的月份还是农历的月份。这样的译法,就像用「正月」来译公历的January、「冬月」译November、「腊月」译December等,并不足取,所以本网站不采用这拙劣译法。


南 明 及 明 郑 (1645年 – 1683年)

南明及明郑的历日根据傅以礼《残明大统历》(收录在《二十五史补编》中)的资料,但是永历二十五年正月朔根据明郑颁行的永历二十五年大统历订正、永历三十年历书冬至日期根据明郑颁行的永历三十年大统历订正。在年历网页输入1645年至1661年的年份便会有按键选择南明的日历、输入1662年至1683年的年份便会有按键选择明郑的日历。朔闰表网页将明朝与南明及明郑的朔闰表放在同一网页,另有网页载有清与南明及明郑朔闰异同表

南明及明郑的历日有几种不同版本,虽然都是根据明朝大统历推算,但是可以肯定算法与明朝钦天监编算的大统历算法稍有差异,而且不同版本有时也有差异。本网站将依明朝大统历推算的结果与《残明大统历》历日所有差异一一列出,其他有争议的历日也一一列出以供研究南明史学者参考,另有专文用历算角度探讨南明和明郑历法的朔闰


秦 至 汉 初 (前221年 – 前104年)

秦朝及汉初(公元前221年 – 前104年)的历法沿用颛顼历的月序。颛顼历是古六历之一,据说战国后期在秦国使用。颛顼历以建亥(即今天的十月)为年首,但仍称建亥为十月。月的数序是十月、十一月、十二月、正月、二月……九月,闰月置于年终,称为后九月。秦朝的历法与颛顼历稍有不同。汉朝建立后基本上沿用秦历,一百年间只作了少许修改,直到汉武帝太初元年(公元前104年)才颁行新历法,以建寅(正月)为年首,并把闰月置于无中气的月份,这使公元前104年的农历年有十五个农历月。秦朝为了避秦始皇名讳(正、政同音),把正月改称「端月」,到汉朝又改回正月。本网站没有跟从历史,在秦朝仍称建寅为正月。

本网站这时期的复原日历是根据李忠林在2012年发表的文章「秦至汉初(前246至前104)历法研究—以出土历简为中心」李忠林。具体计算方法在秦与汉初历法网页阐述。虽然复原历法有效年限估计是秦王政元年(公元前246年)前到汉武帝太初元年(公元前104年)五月,本网站年历网页从公元-220年(即前221年)起才用复原历法、朔閏表网页则从N-220年(即秦始皇二十六年)起才用复原历法(年历网页以公历为主、朔閏表网页则以农历为主)。两网页都在汉武帝太初元年五月起改用《三千五百年历日天象》张培瑜97的数据注五。复原历法的太初元年三月是小月、四月是大月、五月是小月。改了历法后,五月朔提前了一天,使四月变成小月,而新历法的五月又是小月,于是出现了三、四、五三个相连小月,这在平朔法则是不可能的,只有在改历时才可能出现。如果在太初元年六月才改用太初历,就会使五月只有二十八日,这在平时也是不可能出现的。


战 国 时 代 (前480年 – 前222年)

战国时代各国施行不同历法,当时使用的历法有六种:周历、鲁历、殷历、夏历、黄帝历和颛顼历,合称「古六历」。六种历法的计算方法大致相同,但各历的年首不尽相同,用以计算历法的历元也不同。本网站在战国时代列出所有六部古六历,根据《中国古代历法》张陈薄胡书中第三章第六节所述的资料复原。具体计算方法在古六历网页叙述。

夏历有两个版本,差别是计算历法时使用的历元不同。本网站的夏历在春秋时代和战国时代所用的版本不同,春秋时期用的夏历历元是雨水合朔齐同,战国时的夏历历元是冬至合朔齐同。

目前学界对于古六历的闰月位置未有一致意见。本网站假设闰月置于年终,称为闰月,不用注明闰几月。有些学者认为当时以无中气的月份为闰月,所以也注明无中气的月份以供参考。颛顼历较为特殊,以孟冬十月为年首,月序是十月、十一月、十二月、正月、二月……九月,闰月置于年终,称为后九月。

虽然干支纪年可能到东汉才流行,本网站的中历都载有干支纪年,年历网页朔閏表网页在1912年前还附加帝王年号。在战国时代,周历附加东周君王的纪年,周朝于周赧王五十九年(公元前256年)被秦国所灭,东周君王的纪年也到这一年为止。鲁历附加鲁国君主的纪年,鲁国于鲁顷公二十四年(公元前249年)被楚国所灭,鲁国君主的纪年也到这一年为止。颛顼历大约在秦昭襄王时期(公元前306 – 前251)开始在秦国使用,颛顼历自公元前306起附加秦国君主纪年。

古六历在战国时期创制行用,但是当时的历法已经散失,今天我们只能从汉朝及以后的书藉得知古六历的资料。这些「汉传古六历」与战国时实际使用的古六历差异有多大仍未可知。


春 秋 时 代 (前722年 – 前481年)

春秋时期各国施行不同历法,现在我们只能从《春秋》这部由孔子修订的鲁国编年史书中获得当时鲁国施行历法的不完整资料。这里称当时鲁国的历法为春秋历,本网站的春秋历是根据《中国古代历法》张陈薄胡书中第三章第五节的资料复原。具体计算方法在春秋历网页阐述。

春秋历没有固定的置闰法则,正月的月建并不固定,而是在建亥(即现在的十月)与建寅(现在的正月)之间摆动。春秋初期的正月月建多在建丑(现在的十二月),末期则多在建子(现在的十一月)。目前学界对于春秋历的闰月的位置末有一致意见。本网站假设闰月置于年终,称为闰月,不用注明闰几月。春秋历没有计算冬至(或其他节气)的方法,当时的冬至是靠观测而定,所以没有历书节气。由于春秋历在鲁国使用,年历网页朔閏表网页中附加鲁国的君主纪年。

除了春秋历外,本网站还提供周历、殷历和夏历(其中三部古六历)的资料。一般认为这三部历法应在春秋末期或战国时代才建立,把这三部历法在春秋时期列出仅供参考而已。如上一节所述,夏历有两个版本,本网站在春秋时期用的夏历历元是雨水合朔齐同。



备 注 和 参 考 文 献