初稿: 2022年4月
崇祯十七年(1644年)三月,崇祯帝自缢而死,明朝灭亡,北京先后被李自成和清朝占领,明朝宗室与官员在中国南方相继成立政权抗清,史称「南明」。颁布历法一向是帝皇宣示统治的象征,南明继承明朝,历法自然根据明朝大统历编制,然而南明皇帝流离失所,南明各派系又斗争不绝,颁行的历法不像明朝那样由同一批历官编制,于是出现了不同版本的大统历。弘光、隆武和永历被视为继承明室正统,他们都有颁行历法,但与永历帝同一时期的鲁王朱以海在浙东自称「监国」,颁行「鲁监国大统历」。此外,郑成功在闽海一带抗清,郑氏奉南明正朔,但因战乱南明大统历书往往无法及时送到郑氏辖区,于是郑氏命官员依明大统历权宜编制及颁行大统历书。永历帝于永历十五年底(1662年初)被缅甸人送至清军营,南明灭亡。永历十五年郑成功北伐失败,转攻台湾,次年驱逐了占台的荷兰人,在台湾建立明郑政权,又称东宁王国。虽然南明已亡,但是郑氏建立的明郑政权仍然奉明正朔,继续使用永历年号,颁行的大统历书仍注明「皇历未至,本藩权依大统历法命官考正刊行,俾中兴臣子咸知正朔,用是为识」。由于南明已亡,南明大统历已绝,郑氏权宜颁行的大统历变相成为明郑正统的大统历书。明郑直到永历三十七年(1683年)闰六月郑克爽投降清朝才宣告灭亡。
由此可见,大统历在南明和明郑时期至少有五至六种版本。明朝历官皆世业,明亡后,估计这些历官大部分留在北京,成为清朝钦天监的历官。由此估计南明大统历的编制者未有编算明朝历书的经验,而且当时忙于抗清,编算历书并不是首要任务,估计编历者无暇详细研究明朝大统历的算法,只会用他们对大统历的理解编算历书,所以算出的历日与依明朝钦天监正统算法算出的有差异,而且不同版本的南明大统历朔闰有时也有差异。虽然如此,这些历书毕竟以大统历为依据编算,虽有差异但仍是大同小异。
南明和明郑的大统历资料在清傅以礼著的《残明大统历》(收录在《二十五史补编》中)有完整纪录,南明的史料也有一些南明大统历的历日资料。然而史料所记的历日多有歧误,除了是因杂用各版本的南明大统历外,有时还杂用明历和清历。目前似乎不见南明大统历书的存世刊本,明郑颁行的大统历书在英国图书馆却存有几部,都是永历二十五年、三十年和三十一年颁行的历书,这些历书是英国东印度公司商人与明郑政权商讨通商时获得的赠品之一,后来被带到了英国。目前藏于英国图书馆的其中四本历书已数码化,而且可免费查阅及下载:藏于Bodleian图书馆和牛津Christ Church的永历二十五年大统历、藏于St John's College 图书馆的永历三十年大统历及藏于Bodleian图书馆的永历三十一年大统历。本网站遵照图片的版本条款转载对订正历日有用的若干图片,并将图片中的文字抄下:永历二十五年大统历、永历三十年大统历、永历三十一年大统历。这三部大统历书除了有这三年的历日资料外,书末的纪年表还载有至颁历年份为止的南明和明郑时期的闰月,对考证南明和明郑历法很有价值。
本网站的南明历法数据主要根据傅以礼《残明大统历》的资料,但有两个历日根据存世的明郑大统历订正。以下以明朝大统历的正统算法比较《残明大统历》、明郑大统历及其他史料的南明及明郑历日资料。
明朝《大统历》基本上沿袭元朝《授时历》的法数和推步方法。《授时历》的日月推步方法在李勇和张培瑜于1996年和李勇及张承志于1998年发表的两篇文章(和)有介绍,李勇在「明嘉靖六年《大统历》历书的气朔推步精度」 一文说明了大统历的气朔推步法,并根据嘉靖六年大统历书验证了算出的节气时刻完全符合历书给出的数据。
其实明朝的节气是平气,是时间的线性函数,计算十分简单。考察明郑永历二十五年大统历、永历三十年大统历和永历三十一年大统历,发现所载节气时刻亦完全符合大统历的推步。再考察《残明大统历》列出的南明及明郑三十九年间九百三十七个节气日期,发现只有两个日期不符合大统历的推算:《残明大统历》记永历十七年白露在八月初四,依大统历推算当在八月初五;《残明大统历》记永历三十年冬至在十一月十六,依大统历推算则在十一月十七。恰巧永历三十年大统历书仍有存世刊本,得知当年冬至在十一月十七,符合大统历推算,《残明大统历》错了。正是因为大统历节气计算十分简单,算错机会很小,可以假设所有版本的南明大统历算出的节气绝大多数都符合大统历的正统算法。
大统历的合朔算法因涉及日行盈缩和月行迟疾而比较复杂,李勇在文中提出两种算法:D1(迟疾限行度)及D2(定限度)算法,他认为大统历是用D1算法,我在拙文明朝 《大统历》的定朔计算及历表朔日订正证实了李勇的D1算法确实完全符合几部明朝大统历书给出的合朔时刻,所以李勇的D1算法就是大统历合朔的正统算法。比较《残明大统历》及存世的几本明郑大统历书的朔日数据,发现在这三十九年间四百八十三个朔日中有七个与李勇D1算法算出的朔日不符,这七个朔日差异全部都在明郑的永历二十五年(1671年)及以后。下表将这七个朔日差异列出。从这些朔日差异可知明郑大统历算出的合朔时刻与大统历推步相差可达二小时。
年 份 | 月 份 | 朔 日 干 支 | |
---|---|---|---|
残 明 大 统 历/ 明 郑 大 统 历 | 大 统 历 推 步 | ||
永历二十五年 (1671) | 正月 | 甲寅* | 癸丑 (夜子初三刻) |
永历二十八年 (1674) | 六月 | 癸巳 | 甲午 (丑正初刻) |
九月 | 辛酉 | 壬戌 (丑正初刻) | |
永历二十九年 (1675) | 闰六月† | 戊午 | 丁巳 (夜子初二刻) |
永历三十一年 (1677) | 七月 | 丙子 | 乙亥 (夜子初二刻) |
永历三十二年 (1678) | 六月 | 庚午 | 己巳 (夜子初三刻) |
永历三十六年 (1682) | 正月 | 己酉 | 庚戌 (子正一刻) |
*《残明大统历》记永历二十五年正月癸丑朔,明郑颁行的永历二十五年大统历记正月甲寅朔。
†《残明大统历》记永历二十九年闰六月戊午朔(1675年7月23日),依大统历推步此朔日在丁巳(7月22日)。一日之差导致闰月出现分歧:依《残明大统历》六月大戊子朔(6月23日)、闰六月小戊午朔(7月23日);依大统历推步闰五月小戊子朔(6月23日)、六月大丁巳朔(7月22日)。明郑颁行的永历三十年大统历和永历三十一年大统历都记永历二十九年闰六月,显示《残明大统历》的历日符合明郑颁行的大统历书。
以下试论南明史料的朔闰分歧。
如上述,与永历帝同一时期的鲁王自称「监国」,颁行「鲁监国大统历」,用鲁王监国纪年:鲁王监国元年即隆武二年(1646年)、鲁王监国二年即永历元年等,鲁王于监国八年(永历七年)三月除消监国称号。黄典权在「南明大統曆考證稿」文中根据黄宗羲「鲁纪年」、「海外恸哭记」、翁州老民的「海东逸史」、凌雪「南天痕」、三余氏的「南明野史」等资料考证了「鲁监国大统历」的一些朔日,发现有两个朔日与《残明大统历》不合:鲁王监国四年正月辛酉朔及鲁王监国七年正月癸酉朔。监国四年即永历三年(1649年)、监国七年即永历六年(1652年),《残明大统历》记该两年的正月朔为庚申和甲戌,这两个朔日差异也许是永历和鲁王两种大统历书的朔日差异。依大统历推步得出永历三年正月朔在庚申日亥正二刻,永历六年正月朔在甲戌日子正一刻。可见《残明大统历》的两个朔日符合大统历推步,「鲁监国大统历」的朔日差异显示其算出的合朔时刻与大统历推步可差一小时半。
《残明大统历》和《延平王户官杨英从征实录》记永历四年闰十一月,符合大统历的推步,但是明郑颁行的永历二十五年大统历、永历三十年大统历及永历三十一年大统历却记闰十二月。黄典权在文中指出闰十一月的记载也见于钱澄「所知录」、瞿元锡「庚寅始安事略」、夏琳「海纪轨要」、院曼锡「海上见闻录」等,因此认为闰十二月孤证薄弱,猜测永历二十五年大统历闰十二月为「误刻」。但黄典权没有看到永历三十年和三十一年的大统历书,不知道那两本历书也记闰十二月,因此「误刻」之说难以成立。下表根据大统历推步列出与此年闰月有关的合朔和中气。
月 份 | 合 朔 | 中 气 |
---|---|---|
十一 | 冬至: 戊寅(1650年12月21日)酉正三刻 | |
闰十一 | 庚辰(1650年12月23日)午初一刻 | |
十二 | 己酉(1651年1月21日)亥初三刻 | 大寒: 己酉(1651年1月21日)卯初一刻 |
正 | 己卯(2月20日)辰正一刻 | 雨水: 己卯(2月20日)申初三刻 |
表中可见根据大统历推步,己酉朔对应的月份因含十二月中气大寒是十二月,庚辰朔对应的月份因不含中气是闰十一月。如上述,节气计算很简单,不容易算错,可以假设南明大统历编算者算出的冬至、大寒和雨水都符合大统历推步,但是编历者算出的合朔时刻或会与大统历正统算法稍有差异,由于大统历算出的己酉朔离次日子正初刻有约二小时,编历者或会因计算差异而算出该朔落在下一日庚戌(1月22日),这样庚辰朔对应的月份含大寒为十二月、庚戌朔对应的月份不含中气为闰十二月。从上一节的讨论得知明郑大统历算出的合朔时刻确实会与大统历正统算法有二小时偏差,而闰十二月的资料来自明郑颁行的大统历书,合理猜测是闰十二月可能是当时郑氏命官员权宜编算大统历算出的结果,而闰十一月可能是来自永历大统历。由于郑氏奉明正朔,当时南明尚在,取闰十一月较好。
《残明大统历》记永历七年闰七月,符合大统历的推步,但是《延平王户官杨英从征实录》记闰八月、《行在阳秋》和明郑的永历二十五年大统历记闰六月、永历三十年大统历及永历三十一年大统历却记闰八月。黄典权在文认为闰八月可能是郑氏命官员权宜编算大统历的结果,永历二十五年大统载的闰六月极可能是凭南明「皇历」正本而改正的,所以认为永历七年闰六月。黄典权没有看到永历三十年和三十一年的大统历,不知道两本历书改记闰八月,因此据皇历改正之说值得商榷,较有可能的是永历二十五年历书的闰六月为刻误。下表根据大统历推步列出与此年闰月有关的合朔和中气。
月 份 | 合 朔 | 中 气 |
---|---|---|
六 | 大暑: 壬戌(1653年7月22日)辰初三初 | |
七 | 甲子(1653年7月24日)戌正一刻 | |
处暑: 壬辰(8月21日)酉正一刻 | ||
闰七 | 甲午(8月23日)辰正一刻 | |
八 | 癸亥(9月21日)夜子初初刻 | 秋分: 癸亥(9月21日)寅正三刻 |
九 | 癸巳(10月21日)申正二刻 | 霜降: 癸巳(10月21日)申初一刻 |
表中可见癸亥朔离次日子正初刻有一小时,如果编历者算出的朔日落在下一日甲子,则甲午朔对应的月份因含八月中气秋分成为八月,下一个月不含中气成为闰八月。可见就历算而论闰七月和闰八月都有可能,闰六月是最不可能的,因为要使甲子朔不含七月中气处暑,就要将下一个朔从甲午提前两日到壬辰,这样便无法用编历者计算与大统历算法稍有差异来解释,而是要编历者计算时犯下严重错误才有可能得出闰六月。其实此年清时宪历闰六月,所以王叔武在「南明史料朔闰考异 — 《行在阳秋》札记」一文怀疑《行在阳秋》的闰六月记载是杂用清历。
我认为既然明郑的永历三十年和三十一年大统历都有闰八月记载,闰八月很可能是郑氏权宜颁行历书的计算结果。至于《残明大统历》的闰七月确是当时永历大统历的闰月,还是如黄典权猜测是傅以礼因缺乏资料而用大统历推步补上的数据,尚需考证。
《残明大统历》、永历二十五年大统历、永历三十年大统历和永历三十一年大统历都记永历二年闰三月,符合大统历推步,但是王叔武在「南明史料朔闰考异 — 《行在阳秋》札记」一文引《劫灰录》, 《鹿樵纪闻》, 《明季南略》, 《爝火录》等记载主张应为闰六月。现先列出根据大统历推步与此年闰月有关的合朔和中气。
月 份 | 合 朔 | 中 气 |
---|---|---|
三 | 谷雨: 甲子(1648年4月21日)戌初一刻 | |
闰三 | 丙寅(1648年4月23日)辰初初刻 | |
四 | 乙未(5月22日)亥初初刻 | 小满: 乙未(5月22日)卯初三刻 |
五 | 乙丑(6月21日)辰正初刻 | 夏至: 乙丑(6月21日)申正一刻 |
六 | 甲午(7月20日)酉初三刻 | |
大暑: 丙申(7月22日)丑正三刻 | ||
七 | 甲子(8月19日)丑正二刻 | |
处暑: 丙寅(8月21日)未初一刻 |
从王叔武在文提供的明清朔闰异同表得知他认为上表的闰三月丙寅朔应改为四月丙寅朔、四月乙未朔改为五月乙未朔、五月乙丑朔改为六月乙丑朔及六月甲午朔改为闰六月乙未朔。这样的改动除了要将甲午朔(7月20日)推迟一日变为乙未朔(7月21日)外,还要改动三个中气日期:小满和夏至需提前一日使闰三月变四月及四月变五月、大暑需提前二日使五月变六月及六月变闰六月。大统历推步的六月甲午朔离次日子正初刻超过六小时, 除非编历者计算时犯了重大错误, 不大可能因算法与正统算法稍有不同而落在下一天。明历的平气算法非常简单,要改变那三个中气日期,就又要假设编历者犯下重大计算错误。所以就历算而论,王叔武提出的朔闰难以成立。
李勇、张培瑜,「中国古历定朔推步综述」,天文学进展,14,66-76,1996。
Li, Y., Zhang, C.Z., "Chinese syzygy calculation established in the 13th century", Astro. Astrophys., 332, 1142-1146 (1998).
李勇,「明嘉靖六年《大统历》历书的气朔推步精度」,天文学进展,29,218-227, 2011。
黃典权,「南明大統曆考證稿」,《臺南文化》第七卷第三期, 98-135, 1962。
注:此文章有网上版,但不知道是谁复制的,(2022年4月按连结看到的版本)竟然有很多错误,显然未有仔细校对。有些错误颇严重:「傅以禮」写成「傳以禮」、「鄭氏」写成「鄧氏」、「大統曆」写成「大統層」、「己丑朔」写成「之丑明」、「置閏」写成「量潤」等等,大小错误不胜枚举,阅读时须留意。
王叔武,「南明史料朔闰考异 — 《行在阳秋》札记」,《思想战线》,1979年第3期,82-85。