最后修订时间:2026年10月18日
汉武帝太初元年,公元前一〇四年,汉朝换了一部历法。
换历这件事,史书记下来的是礼仪与德运:改正朔、易服色、封禅、改元。历法本身怎么算,纸面上剩下的只有一串数。这串数收在《汉书·律历志》里,标题叫「统母」——「母」是立法的根本,后面的推算都从这个母数生出来。
统母里有两个数最要紧:一个管一个月有多长,一个管几年插几个闰月。前者古人叫朔策,后者叫闰周。这两个数只要偏一点,日子就会一年一年地错开,错到最后,历书上写着初一,天上却是晦日。
这篇文章讲的就是这两个数:它们怎么定的,偏在哪里,什么时候被人发现。
一、太初改历,换的不是一年,是一把尺
秦与汉初用《颛顼历》,以十月为岁首。汉朝接手,没有改,一路用到汉武帝。
到太初元年,改了。改的第一件事是岁首:从十月挪回正月。这件事在《史记》《汉书》里都记着,前一篇《「颛顼历」与秦至汉初历法的考古证据》已经谈过,这里不重复。
要补的是第二件事,也是更容易被忽略的一件:这次改历不只挪了岁首,还把「一日切成几份」这件事重新定了。
古人算历,不用小数,用分数。一日切成多少份,叫日法。日法一定,一个月、一年都只能落在这些份数的格子上。太初改历把日法定在八十一。
八十一这个数不是随手写的。《汉书·律历志》开篇讲统母,第一句就交代了它的来路:
日法八十一。元始黄钟初九自乘,一龠之数,得日法。
黄钟是律管之名,初九是《易》的阳爻之数,九自乘得八十一。一根律管的容积,一龠,也正好是八十一分。所以八十一在汉代是「数出有故」的数:它从乐律与卦爻里来,不是从天上量出来的。
这一点很要紧。历法要合天,可制历的人手里握着的尺子,先是一把数术的尺子。后面的偏差,根子在这里。
二、《太初历》与《三统历》:一套数,两个名
这里有个容易绕晕的地方:太初年间改的那部历,叫《太初历》;后来收进《汉书》的那套完整算法,叫《三统历》。两个名,一套数。
《后汉书·律历志》追述这段,用的是后一个名:
自太初元年始用《三统历》,施行百有余年,历稍后天,朔先于历,朔或在晦,月或朔见。
「自太初元年始用《三统历》」——后人把太初元年起的这整套系统,直接称作《三统历》。这个称呼与刘歆有关。刘歆在西汉末年整理历法,替这套数配了一整套「三统」的说法:天统、地统、人统,黑统、白统、赤统,一一对应到夏、殷、周三代。数还是那些数,说法换了。
所以读汉代历法,看到「太初」与「三统」并列,不必当成两部历。它们的分量差别在名号,不在数字。
三、朔策:一个月是二十九日又八十一分之四十三
《汉书·律历志》的统母,把要用的数一次列齐:
日法八十一。……月法二千三百九十二。……闰法十九,因为章岁。……章月二百三十五。……统法千五百三十九。……周天五十六万二千一百二十。……朔望之会百三十五。
七组数,各有各的用处。与月长直接相关的是前两个:日法八十一,月法二千三百九十二。
日法是把一日切成八十一份,月法是一个月占多少份。二千三百九十二份,摊到八十一片一日里头,就是二十九日又八十一分之四十三日。这一步不是我在算,汉代人自己就这么读:一个月二十九天半多一点,剩下那半天的零头,记成八十一分之四十三。
为什么不再细分?因为日法就定在八十一。分母定了,格子就定了。天上的朔望月不会照着人的分母走,人只能把最近的格子认作它。
八十一分之四十三这个零头,后来成了汉代历法的一个标志,连名字都由此而来:八十一分法。制历的人对自己的这个分母很得意,《汉书》把它摆在统母第一条,还专门解释了它从黄钟来的道理。
四、闰周:十九年七个闰月
第二个数是闰周。
阴历十二个月,比一个回归年短。短出来的日子攒上两三年,就够一个月,于是要插一个闰月。几年插几个,是历法的大关节:插多了,季节往前赶;插少了,季节往后拖。
汉代的办法是十九年七个闰月。统母里两条记载说的就是这件事:闰法十九,章岁十九;章月二百三十五。
二百三十五这个数怎么来的,古人写在《汉书》的注里,也写在《后汉书》的注里:十九年,每年十二个月,得二百二十八个月;再加七个闰月,正好二百三十五。一章十九年、二百三十五个月,一章之内七个闰月——这就是十九年七闰。
这套办法的道理是:十九个回归年的长度,与二百三十五个朔望月的长度,差不多相等。差不多,不是相等。古人知道这一点,所以叫它「章」,一章之后朔旦与冬至又回到同一天,可这只在同一章之内成立;章与章之间的余数,还得往下攒。
《汉书·律历志》在统母之外还记了「朔望之会百三十五」,记了「会月六千三百四十五」,都是为了处理这个「攒下来的余数」——日食月食要在朔望上发生,朔望对不上,交食的日子就对不上。一层一层往上加周期,加到「统」、加到「元」,本意都是想把余数收干净。
收不干净。这是后话。
五、误差什么时候显形
太初历行了一百多年,问题出来了。
《后汉书·律历志》把这段写得很清楚,先总说一句:
自太初元年始用《三统历》,施行百有余年,历稍后天,朔先于历,朔或在晦,月或朔见。
「历稍后天」是历法走得慢了:天上已经到了那个位置,历书上还没到。「朔先于历」是朔日抢在历书前面:历书上写着还没到初一,天上已经是看不见月亮的晦日。最后一句最直白:朔或在晦,月或朔见——该是初一的那天,天黑得看不见月亮;该看不见月亮的那天,一弯新月已经挂上来了。
这不是算出的小差,是看得见的小差。
到东汉章帝元和二年,差得更多:
至元和二年,《太初》失天益远,日、月宿度相觉浸多,而候者皆知冬至之日日在斗二十一度,未至牵牛五度,而以为牵牛中星,后天四分日之三,晦朔弦望差天一日,宿差五度。
冬至那天太阳该在斗宿二十一度,历书却还写着牵牛中星。晦朔弦望差了一整日,宿度差了五度。差到「候者皆知」——不是一两个人算出来,是观候的人都知道。
章帝于是下诏改历。诏书里有一句,把病根点得很准:
史官用太初邓平术,有余分一,在三百年之域,行度转差,浸以谬错。
「有余分一」——这套数里带着一个除不尽的余数。余数不大,一年看不出来;「在三百年之域」,攒到三百年就显出来了。诏书还引了一句谶纬:「三百年斗历改宪」。这句话既是预言,也是事后的注解。
改历的结果是行《四分历》。但改完还有争论。编訢、李梵主张「元首十一月当先大」,理由是要让弦望落在固定的日子上。反对的人指出的正是闰周上的毛病:
而訢、梵犹以为元首十一月当先大,欲以合耦弦望,命有常日,而十九岁不得七闰,晦朔失实。
「十九岁不得七闰」——十九年七个闰月这个周,到这时候已经配不上了。闰周一乱,晦朔就失实。争到最后,章帝裁定「天元始起之月常小」,把起点那个月定为小月。
六、拿日食来对表
改历之争里,最硬的一份材料是贾逵的统计。
贾逵把《太初历》算出来的朔,拿去对史书记载的日食。日食必在朔,所以日食落在哪一天,是检验朔策的一把现成的尺子。他分三段数:
以《太初历》考汉元尽太初元年日食二十三事,其十七得朔,四得晦,二得二日;……以《太初历》考太初元年尽更始二年二十四事,十得晦;……以《太初历》考建武元年尽永元元年二十三事,五得朔,十八得晦。
第一段,汉元年到太初元年,二十三事里头,十七件事对上了朔。第二段,太初元年到更始二年,二十四件事,十件落在晦。第三段,建武元年到永元元年,二十三件事,只有五件得朔,十八件得晦。
三段摆在一起,趋势一目了然:越往后,对上的越少。同一个历法,同一把尺子,前期还算合手,后期就一路偏下去了。
这份统计的方法本身也值得一说。它不去比「差了几刻几分」,只比「落没落在朔这一天」。这是汉代人能做的检验:他们没有精到分钟的记录,有的是史书里「某年某月某日食」这一行字。把这一行字拿来与历书对,对不上就是对不上,赖不掉。
顺带说一句,贾逵同时用新立的《四分历》对同一批日食,结果另记一份。这就是改历之争的实际打法:不比谁的道理好听,比谁对上的多。
七、为什么八十一分法会偏
回到根子上。
八十一分法的问题,不在于八十一这个数算错了,而在于它太粗。一日切成八十一份,一份就是一日之八十一分之一。一个月只能落在这些格子的某一个上,最近的格子,未必就是天上那个月。
今测一个朔望月,约二十九日半多一点,落在两格之间。八十一分法取的二十九日又八十一分之四十三,是靠近它的一格。一格之差看着小,可一个月差一点,十二个月就差一截;差上一百多年,历书上的一天就整个挪了位。《后汉书》说的「朔先于历」「朔或在晦」,就是这么来的。
闰周也是一样。十九年七闰,是把十九个回归年与二百三十五个朔望月当作一样长。实际上两者不一般长,差数一年一年攒。攒到「十九岁不得七闰」,这个周就维持不住了。
这两处偏,方向还不一样:月长偏一点,朔望的日子就慢慢挪;闰周偏一点,季节与月份就慢慢脱开。两处一起偏,历书上的年月日就三头不对。
改行《四分历》,日法改成四,一个月是二十九日又九百四十分之四百九十九——分母换大了,格子密了,落点就准一些。但这也只是把格子做细,没有把「用分数去追天上那个月」这条路换掉。这条路一直走到唐代,一行才改用不等间距的二次差算法。
八、哪一部分能核,哪一部分只是推
分两面说。
能核的:统母那七组数,白纸黑字写在《汉书·律历志》里,日法八十一、月法二千三百九十二、闰法十九、章月二百三十五、统法一千五百三十九、周天五十六万二千一百二十、朔望之会百三十五。这七个数彼此咬合,不是后人补的。改历的年份、下诏的理由、编訢李梵的争论、贾逵的三段统计,也都记在《后汉书·律历志》里,可以逐句对。
不能核的:太初改历当时用的观测记录。落下闳、邓平他们量了什么、量了多少次、误差多少,史书没有留下数据。今天知道的只是结果——他们选了八十一,选了十九年七闰,选了那些分数。为什么是这个数不是那个数,除了《汉书》给的「黄钟」一说,没有别的凭据。
【一说】八十一这个分母取自黄钟律数,是数术上的自证,不是天文上的理由。制历的人先在数术里找好一个漂亮的数,再让历法去迁就它。这个说法能解释统母的排列,但没有直接证据说明当时的人就是这么想的。
还有一层要分清:这篇文章说「偏」,说的是以今天的测量为准。汉代人自己在太初年间并不觉得偏,他们觉得这部历比《颛顼历》准得多——事实也是如此。偏差是一百多年后才显形的,不是历法一颁行就错。把后人看到的偏差倒推回去,说当时的人算错了,这不公平。
A&Q
问:《太初历》和《三统历》是两部历法吗?
答:通常当作一套数的两个名。太初元年(前 104)改历行用的叫《太初历》;西汉末年刘歆把这套数配上「三统」的说法整理成完整系统,收在《汉书·律历志》里,后世称《三统历》。《后汉书·律历志》追述时直接写「自太初元年始用《三统历》」,把两个名并成了一件事。
问:八十一分法为什么叫这个名字?
答:因为它把一日切成八十一份,一个月的零头记成八十一分之四十三。《汉书·律历志》统母第一条就是「日法八十一」,并解释这个数来自黄钟初九自乘、一龠之数。
问:十九年七闰是怎么定的?
答:十九个回归年的长度,与二百三十五个朔望月的长度大致相等。一章十九年、二百三十五个月,其中十二个月一年、共二百二十八个月,余下七个月作闰月。这就是十九年七闰。它是近似,不是恒等。
问:误差是怎么发现的?
答:先由观候发现。《后汉书·律历志》记「历稍后天,朔先于历,朔或在晦,月或朔见」——历书上写的初一,天上已经是晦日。到元和二年,「晦朔弦望差天一日,宿差五度」,候者皆知。再用日食对表:贾逵把《太初历》算的朔拿去对史书记载的日食,前期二十三事对上十七,后期二十三事只对上五。
问:既然偏了,为什么还用了百余年?
答:因为它比前一部准。《太初历》取代《颛顼历》,是因为《颛顼历》「疏阔中最为微近」而积久更疏;《太初历》的八十一分法在当时是更密的格子。偏差是百余年攒出来的,不是一颁行就错。
问:《四分历》改了什么?
答:日法从八十一改成四,一个月的零头改记成九百四十分之四百九十九。分母变大,格子变密,落点更贴天上的月。但它仍然是用分数去追月,这条路要到唐代一行改用二次差算法才换掉。
邝楚嘉按:这一篇讲的两个数,看着是技术细节,其实是汉代人做学问的样子。他们先用律数定分母,再用分数去贴天;分母一定,格子就定了,天上那个月只要落在两格之间,就注定要偏。可贵的地方在于,他们没有把偏赖掉。《后汉书》把那句「朔或在晦,月或朔见」照实写下来,贾逵把二十三件事里只对上五件的账也照实记下来。一部历法行了一百多年,最后是它自己的记录把它推下台的。读古代历志,最值得留意的往往不是那些漂亮的数,而是这些照实写下的对不上。
引用与出处
[1] 史记[M]. 汉.
[2] 汉书[M]. 汉.
[3] 后汉书[M]. 南朝宋.
[4] 资治通鉴[M]. 宋.
本文采用 知识共享署名 4.0 国际许可协议 (CC BY 4.0) 进行授权。
只要在转载、传播或依此进行演绎创作时,注明原作者为「嘉言一得(邝楚嘉)」并附带原始发布链接,即可自由使用(含商业用途)。
文中所引用的出土器物照片、传世文献版权归原属方所有,不在本授权范围内。
协议详情参见:https://creativecommons.org
相关文章
- 抬头与低头之间:古天文历法实证研究的缘起 —— 本系列序篇:两条腿走路,三个阅读约定。
- 尧典四仲中星:一组对不上的数字 —— 同一组数字摆在一起,为什么能算出八千年差距。
- 甲骨文「日有食之」诸条的可核验性 —— 三堆刻辞,三种处境,能算的只有很少的一部分。
- 曾侯乙墓漆箱二十八宿图:四象体系的下限 —— 一件实物只能钉住「至迟」,钉不住「从哪一年开始」。
- 圭表测影与「日至」:登封观星台之前的实测传统 —— 一根杆子、两条影,怎么把「日至」量成一把尺子。
- 「颛顼历」与秦至汉初历法的考古证据 —— 纸上的三条记载与出土的三批历谱,摆在一起看。
英文文章:The Four Fixed Stars of the Yaodian: A Set of Numbers That Will Not Agree | The Verifiability of the Oracle-Bone Records of 「日有食之」 | The Twenty-Eight Mansions on the Lacquer Box from the Tomb of Marquis Yi of Zeng | The Gnomon and the Sun at Its Utmost | The Zhuanxu Calendar and the Archaeological Evidence for the Calendars of Qin and the Early Han
相关枢纽页:华夏古天文历法实证研究 | 历法术语表 | 历法记录:一年从哪一天算起 | 数据集与预印本
本篇全部数据,由邝楚嘉搜集整理。
作者:嘉言一得(邝楚嘉)|独立研究者,致力于可核验的原始文献与历法数据归档。
Author: Chujia Kuang (邝楚嘉), pen name Jiayan Yide (嘉言一得) — independent researcher devoted to archiving verifiable primary sources and calendar data.
平实记录 · 数据集 · 预印本:GitHub / WordPress / Zenodo(DOI: 10.5281/zenodo.22788686 / 10.5281/zenodo.23028692)
Records · Datasets · Preprints: GitHub / WordPress / Zenodo
学术身份 · Academic identity:ORCID 0009-0002-7650-833X | OpenAlex A5151908354
数据来源与方法 · Data & Methods