分享

浅说历法计算

 缠绵168 2023-02-27 发布于广西

楔子

    本着“学新”顺带“温故”的念头,想着试做个公历、农历相互转换的小工具,一来练手,二来方便自己兴趣,加上在很久以前还手工做过一个盘用来找出某个时间的干支,想来不会太难,因此回家找出这本书,准备开干。

图片

人总是掉入“会轻易相信自己”的陷阱,这次仍然没躲开,想简单了!

正文

1. 引言

想着古历以及还在用的,大多是基于四分历法,找个公式就好了。实际发现,根本没有!中国从历元计数开始到现在,约4~5000年样子,这个过程中王朝更替,历法也随之频繁更替,根本就没有一个统一的方法。

图片 

   先说几则有关清历的小故事:

   清朝第一部《御定万年历》是在乾隆年间由钦天监所编成,从清入关前的第一个甲子年(1624)到乾隆一百年(1835),乾隆五十二年(1787)重修,把年限延长到乾隆二百年(1935)。乾隆以后,凡是新皇帝登基都会重编《万年历》,把年限延长到新皇帝年号的第二百年。最后一部清制《万年历》是在宣统二年(1910)编成,年限延长至宣统二百年(2108)。有意思的是,万年历虽然预推二百年,但是清廷每年颁行的《大清时宪书》并不根据万年历制定,而且有时还会修正《万年历》的预推。比如同治《万年历》预推同治二十九年(即光绪十六年)六月小、七月大,七月初一干支是戊辰;而《时宪书》改为六月大、七月小,七月初一的干支是己巳,相差一天。这样的例子还有不少,说明即便在清时,《万年历》也不是正式采用的。显然《万年历》的推法简略,当合朔时刻接近夜半零时,用简略算法推出的朔日会落在错误的日期。

   1912年后采用公历(格里历),不再颁行官方“万年历”,这样民间流传的农历就会有不同的版本出现。1953年,大陆出现了两种不同的农历,一种是根据宣统《万年历》记载的农历六月小七月大,七月初一是8月9日;一种是根据紫金山天文台六月大七月小,七月初一是8月10号。不过,自此以后,大陆出版的日历大都根据紫金山天文台发布的资料。到了1978年,由于香港等地还在用宣统《万年历》,这一年的中秋节香港是9月16日,而大陆是9月17,又相差1天,自此后香港也采用紫金山天文台编制的农历。到了1989年,又出现了宣统《万年历》和紫金山天文台对七月初一的日期差异,由于香港和大陆都采用紫金山天文台编制的农历,但台湾仍然用宣统《万年历》,经台湾权威机构证实紫金山天文台的数据正确。此后两岸三地都采用了紫金山天文台编制的农历。

    2017年中科院紫金山天文台拟定了《农历的编算和颁行》(GB/T 33661-2017),国标主要是用现代天文法严格定义历算中涉及的天文学概念。中科院会提前一年正式发布农历日历的年度标准资料,因此又有了“官方版”。国标的订立,避免了不同版本农历带来的混乱。

    由上可知,由于古时观测条件的限制,精度上都不会太准,因此过一段时间就要修正历法。尽管如此,历法推演是个“技术”活,涉及很多知识。

2. 概念

    历法是为了记录时间而制定的。在古时,有多个周期对人们日常生活有着重要影响:昼夜交替的周期、月亮盈亏的周期、季节交替的周期、岁星行进的周期等。昼夜交替的平均时间是平太阳日;月亮盈亏的周期是朔望月,平均值是29.5306日;季节交替的周期是回归年(古称岁实),现在的定义是太阳平黄经增加360度所需的时间,现在的平均值是365.2422日。回归年也可由两冬至或两春分的平均时间以定,从冬至到下一个冬至的平均时间现在是365.2427日,从春分到下一个春分的平均时间现在是365.2424日。三者的时间接近却不相等,这是由于岁差及地球轨道是椭圆的原因;岁星就是木星,平均每十二年绕行一周,其轨道黄道相近,因此将周天分为十二分,称为十二经。木星每年行经一次,以其所在星次来纪年,故称岁星。现代天文学发现木星的公转周期约11.8地球年,近等于12地球年;自转时间从9h50m30s到9h55m40s左右不等,近等于10小时。

    历法要解决的一个重要问题是怎样编排年月日时。上述几个周期彼此之间的比例都不能约化成简单分数,这就使得编制历法较为困难。其中一个方法是不理会朔望月,只考虑回归年,年和月按特定规律编排,使得一年的平均长度近似回归年的长度,这样的就是“阳历”,现行的公历就是一种“阳历”;另一个办法是不理会回归年,年和月按特定规律编排,使得一个月的平均长度接近朔望月长度,这样的就是“阴历”;第三个方法就是同时兼顾回归年和朔望月,年和月按特定规律编制,使得一个月的平均长度接近朔望月,一年的平均长度接近回归年,这样的历法就是“阴阳历”,农历就是一种阴阳历。

   月相是指月亮的一种特定“面相”,常用的月相有四种:朔、上弦、望、下弦,它们分别指月亮与太阳的地心视黄经相差0度、90度、180度和270度的月相。(a) 朔时:月亮处于太阳和地球之间,朔日,月亮几乎和太阳同时出没,因为其朝向地球的一面照不到太阳,所以从地球上看不到月亮;(b) 上弦时:太阳在月亮的西面约90度的方向,上弦日,太阳西落后人们可以看到半个明月(月亮的西边半圆月面明亮)高挂天空;(c) 望时:地球处于太阳和月亮之间,望日,当太阳西落时人们可以看到满月从东方升起;(d) 下弦时:太阳在月亮东面约90度的方向,下弦日,大约在午夜时分人们可以看到半个明月(月亮的东边半圆月面明亮)从东方升起。

图片

    农历规定把朔落在的那一日定为某月初一,朔望月的平均值是29.5306日,所以农历一个月可以是二十九日(小月),也可以是三十日(大月),月大月小根据两朔之间的日数而定。回归年的周期是365.2422日,是朔望月平局怒值的12.37倍,所以农历“平年”有十二个月,为了不偏离回归年的周期,约每隔两三年需要加一个“闰月”,即一年有十三个月,是为“闰年”。

3. 节气

    如何设置“闰月”,是根据二十四节气来确定的。二十四节气为农历中所特有,根据地球环绕太阳运行的黄道360度,以春分为零点,分为二十四等分点,两个等分点相隔15度,每个等分点设有专名,含有物候特点等意义。二十四节气即立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒。以上依次顺数,逢单的均为“节令”,通常简称为 “节”;逢双的则为“中气”,简称“气”,合称为“节气”。

图片

    二十四节气歌诀:春雨惊春清谷天,夏满芒夏暑相连,秋处露秋寒霜降,冬雪雪冬小大寒。每句的第四个字表示的是:春分(太阳移到黄经0度)、夏至(太阳移到黄经90度)、秋分(太阳移到黄经180度)和冬至(太阳移到黄经270度)。春分、秋分是白天与夜晚长度相等的日子,夏至和冬至又是白天最长与最短的日子。它们正好平分阳历年中的四个点,即平分地球绕太阳轨道的四个点。

   农历中月份名称是由“中气”决定的:

    含“雨水”的月份为一月;含“春分”的月份为二月;含“谷雨”的月份为三月;含“小满”的月份为四月;含“夏至”的月份为五月;含“大暑”的月份为六月;含“处暑”的月份为七月;含“秋分”的月份为八月;含“霜降”的月份为九月;含“小雪”的月份为十月;含“冬至”的月份为十一月(冬月);含“大寒”的月份为十二月(腊月)。而没有包含中气的月份作为上月的闰月。

    四分术使用平气法,将一年平分为12节气和12中气,则气策为(15+7/32)日,两次中气间隔为(30+14/32)日。利用求余函数,只需知道第一个节气的值,即可求出后续每一个节气的值。 

4. 历元

   不管是古六历还是后面的历法,大多采用的是四分术,取十九年七闰法。四分术的名称缘于其岁实(回归年)取三百六十五又四分之一日(即365.25日),朔策(朔望月)取岁实的19/235,即朔策=(365+1/4)*19/235=(29+499/940)日=29.530851064日。这样的目的是要使235(19*12+7)个朔望月等于19个回归年,即十九年加七个闰月就能使历法一年的平均值等于四分术采用的岁实。

    历元是指历法的起算点,一般是指定某一日的二十四节气(通常是冬至)与合朔发生在同一时刻(通常是夜半即午夜零时子正),称为某节气合朔齐同。以古六历示例:

图片

    表中的“甲子日夜半冬至合朔齐同”又作“甲子朔旦冬至”,是指冬至和合朔同时发生在甲子日的夜半(午夜零时子正)。

    以周历为例,周历的历元是冬至与朔发生在甲子日的夜半,即“冬至合朔齐同”。唐以前的历法以平朔法计算合朔时刻、以平气法计算节气时刻,即假设太阳和月亮以匀速在天空运行。根据规则在历元时冬至与合朔发生在同一时刻,下一年的冬至便在(12+7/19)个朔望月后,但这时的冬至与合朔就不齐同了,冬至离之前最接近的合朔有7/19个朔望月(即10.88)之差,这7/19称之为“闰余”。

    一般而言,“闰余”定为某个特定节气(通常是冬至)的月龄,即该节气离上一个合朔的时间间隔,一般以朔策的分数倍表示。因此,闰余在历元是0,一年后是7/19,即下一年的闰余是这年闰余加上7/19,如果加后超过1,则要减去1。依照这个法则可算出闰余从历元算起的头十九年是0/19、7/19、14/19、2/19、9/19、16/19、4/19、11/19、18/19、6/19、13/19、1/19、8/19、15/19、3/19、10/19、17/19、5/19、12/19,到了第二十年,闰余又回到0,即冬至与合朔又齐同了,由此可知闰余是十九年的周期。十九年称为一“章”。

    一“章”后虽然冬至与合朔又发生在同一时刻,但是这个时刻已不在夜半,因为365.25*19=6939.75,用现在的时间系统来看,冬至与合朔这时发生在18时,要到四“章”(76年)后冬至与合朔才会又同时发生在夜半。四“章”称为一“蔀”。

    一“蔀”后虽然冬至与合朔又发生在夜半,但是265.25日*76年=27759日,而27759不是60的倍数,所以一“蔀”后的日干支不是甲子而是癸未,要到二十“蔀”(1520年)后才可回到甲子日冬至与合朔同在夜半。二十“蔀”称为一“纪”。

    一“纪”有1520年,但1520也不是60的倍数,所以一“纪”后年的干支与历元时也不同,要到三“纪”(4560年)后才可回复到与历元相同的年干支。三“纪”称为一“元”。元即始,又回归到起点的意思。

图片

    依据《开元占经》记载的周历,推算可知公元前104年的“甲子日夜半冬至合朔齐同”,这一时刻可作为周历历元。公元前104年的甲子日冬至,由此计算出历元落在公元前105年的12月25日,即这一天是“甲子日夜半冬至合朔齐同”。

图片

5. 干支

图片

    古代以干支纪日,若求朔日干支,以初值0为甲子,每60日一个循环,即可对60求余。第二年冬至朔日余54又348/940,其中54称为大余,349称为小余,940称为日法或蔀月。求大余使用整除运算符,求小余使用求余运算符。

6. 置闰

    置闰方法有三种:闰余法、固定冬至法、无中气法。无中气法的规则必然会出现年中闰月,固定冬至法一般把闰月直于年终,闰余法没有指明一定要在年终或年中置闰。

(1) 闰余法

   如前文所述,四分术的岁实=(12+7/19)朔策,即闰余在一年后增加7/19,若超过1,则减去1。在蔀首的第一年是0,即冬至在正月初一夜半,下一年冬至在一个岁实后,即12个月后加1/19朔策,闰余是7/19,如果没有闰月,冬至在正月十二。再过一年后,闰余是14/19,如果没有闰月,冬月在正月廿三。再下一年,14/19+7/19,超过1,意味着下一年的冬至在这年正月后的十三个月,假如这年还是不闰,冬至就会在二月,而正月不含冬至,月建不再是建子了。所以为了使这个月的月建是建子,第三年必须有闰月,使冬至在第四年仍在正月,闰余是2/19.不难看出,如果某年的闰余加上7/19后达到或超出1,该年必须要有闰月才能使正月月建保持在建子。所以闰余的置闰法则是:在冬至的月龄达到或超过12/19(>=12/19+7/19)的年份加插闰月。由入蔀年的第一年闰余零起算,要置闰的年份是第三、六、九、十一、十四、十七和十九年。到了第二十年,闰余回复到零,所以闰月有十九年的周期,即章周。这闰余法得到的闰年规律是3-3-3-2-3-3-2(即岁差),即闰月出现在第三年,然后是第六年(=3+3)年,然后是第九(=3+3+3)年等。

   闰余法只规定哪一岁置闰,但没有规定闰月的位置,闰月可以置于年终也可置于年中。年终置闰很简单,年中置闰的法则是:当冬至的月龄达到或超过12/19时必须要置闰。每岁的冬至月增加7/19,将此数除以12得7/(19*12)=7/228,把这一岁的冬至月龄在建子月后每月加上7/228,则在十二个月内必然会达到或超过1,闰余的年中置闰法则是以积月累积月龄数达到或超过1的那个月作为闰月。

(2) 固定冬至法

    这个法则是以冬至固定在某个特定的月份内的原则决定要不要置闰,冬至固定的月份以历年年首的月建决定。周历、黄帝历等以建子月为正月月建,所以冬至固定在正月;殷历以建丑为正月,冬至固定在十二月;夏历以建寅为正月,冬至固定在十一月;颛顼历虽然以建亥为年首,但采用夏历的月序,所以冬至也固定在十一月。

    如前所述,“岁”是指建子月初一日到下一个建子月之前一日的那段时间。一岁可以有十二个月,也可以有十三个月。含十二个月的称为“平岁”,含十三个月的称为“闰岁”。由于固定冬至法规定建子月必定是某个特定月份,闰岁那十三个月中必定要有闰月,闰月置于年终,而平岁则没有闰月,这就是固定冬至法的置闰规则。潜规则是一岁必须有十二个正常月而且每个常月只能出现一次。

   固定冬至法在很多情况下所得的闰月年份和闰余法一致,四分术的岁实(12+7/19)的朔策,如果某岁冬至月的月龄是k,建子月的朔在冬至前K个朔策,下一岁的冬至在建子月朔后(12+k+7/19)个朔策,如果k<12/19,下一岁冬至在建子月后不足十三个月,所以下一个建子月一般在该岁建子月后的第十二个月,也就是朔两个建子月相差十二个月,是平岁而没有闰月;如果k>=12/19,下一岁冬至在建子月后一般会超过十三个月,这时两个建子月相差十三个月,所以就有闰月。结果和闰余法则一致。

(3) 无中气法

   无中气法是把冬至固定在某个特定的月份,如果两个建子月相差十二个月(平岁)则不闰,相差十三个月(闰岁)则闰。无中气法对闰月的位置有明确规定:闰月置于无中气的月份。

   中气是指由立春算起双数的节气,根据平气法两中气的时间间隔是岁实的十二分之一,用四分术的岁实得(30+7/16)日。由于时间相差大于三十日,一个月最多只能有一个中气。一岁有十二个中气、平岁有十二个月,由此可知每月含一个中气。闰岁有十三个月,但只有十二个中气,由此可知有一个月且只有一个月不含中气,无中气法就把这个不含中气的月份定为闰月。因为冬至固定在某个特定的月份,而闰月不含中气,所以非闰月的月份含的中气也固定。以夏历为例,冬至之月建子固定在十一月,从而推出十二月必有大寒、正月必含雨水、二月必含春分等,这样月份和中气就有一一对应关系。换言之,固定冬至法把冬至固定在指定的月份,无中气法把十二个月中气固定在指定的十二个月份中。

   用无中气法得出的闰月和用闰余之年中置闰法的结果大致相同。假设某岁冬至的月龄是k,建子朔就一般在冬至之前k个朔策,两中气相隔岁实/12=(1+7/288)朔策,所以大寒在冬至后的(1+7/288)朔策,在建子朔后(1+k+7/288)朔策,在建子朔算起的第二个朔后(k+7/288)朔策。同理,雨水在建子朔算起的第三个朔后(k+7/288+7/288)朔策,以此类推。这规律和闰余年中置闰的月龄累加法相同。当累加之和刚刚达到或超过1时就意味着会有一个中气离开前一中气之月之后的那一个月超过一个朔策,也就是说前一中气之月之后的哪一个月不含中气,所以是闰月。但是当累加之和很接近1时,中气和其后的朔可能会在同一日,这时该中气归其后之朔的月份,之前的月份就不含中气而定为闰月,这闰月便会和闰余年中置闰法有一个月之差。所以无中气法和闰余年中置闰法有时会有差异。

   四分术的19岁实=235朔策,19岁有19*12=228个中气,228=235-7,所以一章(十九年)有7个无中气月。无中气法因此符合十九年七闰的规律。

   已知史书中没有记载无中气法在汉以前是否被用过,但是从汉武帝太初元年(公元前104年)开始的其后一千七百多年中,无中气法一直是中国历法的置闰标准。直到清顺治二年(1645年)改用定气计算节气后,置闰法则才需要略加修改以应对平岁可出现无中气月、闰岁可出现两个无中气月这些平气法不可能出现的现象。现在农历的置闰法则是平岁无论有没有无中气月都不置闰,闰岁则把闰月置于冬至后第一个无中气的月份。用平气法计算二十四节气,平岁不可能出现无中气月,闰岁只有一个无中气月,所以现行置闰法则用于平气节气得出的结果和无中气法完全相同,可说成是无中气法的推广法则。

7. 法则

    2017年中科院紫金山天文台发布了国标(GBT 33661-2017)《农历的编算和颁行》,制定了标准法则:

(1) 法则一

朔和二十四节气的时刻用东经120度标准时(即北京时间),1929年实施。

(2) 法则二

如果从某个农历十一月开始到下一个农历十一月之前之间有十三个月(包括第一个十一月但不计第二个十一月),则取其中最先出现的一个不包含中气的农历月为农历闰月。

(3) 法则三

农历日是从北京时间0点起计量到北京时间24时截止的时间间隔。

(4) 法则四

朔日为农历月的第一个农历日。

(5) 法则五

包含冬至的农历月定为农历十一月。

(6) 法则六

农历十一月后(不含十一月)第二个(不计闰月)农历月为农历年的起始月,即正月。

(7) 法则七

农历用干支纪年。

(8) 法则八

农历月按照数序纪月法命名,即除闰月外,农历月按照其在农历年中的先后顺序分别为:正月、二月、三月、四月、五月、六月、七月、八月

九月、十一月(冬月)、十二月(腊月),闰月采用在其前一个农历月的名称前加“闰”字命名。

(9) 法则九

农历日按照其所属农历月中的顺序表示,第一日到第十日依次用汉字纪为初一、初二、…初十,第十一日到第二十日依次纪为十一、十二、…二十(廿),第二十一日到二十九日依次纪为廿一、廿二、…廿九,第三十日纪为三十。农历日也可以用干支来纪。

   法则一是确定格林威治时间后加上的,算农历时应用UTC+8作为标准时。1929年之前的时间以北京地方时(即真太阳时)为准,北京的经度是116度25分,与东经120度标准时相差约14分钟。如果朔或节气时间接近午夜零时,十四分钟之差可以使朔日或节气之日有一日之差。比如1916年2月4号0:05,按北京地方时间这朔发生在2月4号午夜前,所以朔日是2月3号,这朔日正好又是农历丙辰年的正月初一,所以应该1916年2月3号是农历新年,而不是2月3号,但是按新的法则东经120度时间,农历新年就是2月4号了。运用法则一的方法计算以前的合朔和节气日期可能会与当时的计算结果不一致,算出的农历可能可以前的农历不一致。这是由于真太阳时经度和东经120度的差异导致。为了避免混淆和歧义,遇到这样的情况,当以那时朝代颁行的历法日历为主。法则二是顺治二年历法改革时制定的,修改了之前历法的“无中气”置闰法则。除了法则一、二,其它法则基本上是继承古制。法则四、五其实就是“十一月含冬至建子,以建寅为正月”的另一写法。

8. 计算

    要精确计算历法,必须把太阳和月亮的位置计算的很准确。在一秒钟的时间,太阳的视黄经平均来说增加360度/(365.2422*86400)=0.04”。也就是说要把二十四节气的时刻精准到秒,必须把太阳的视黄经算准到0.04弧秒。同样的,要把合朔时间算准到秒,月亮的视黄经必须精准到360度/(29.5306*86400)=0.5”。如前文所述,高精度的合朔和节气时刻只有在接近午夜零点时才有必要,而这个是无法有效预知和推算,目前也是无能为力的,因为每一回归年和回归月的时间都不相同,公式计算法只能采用平均数值来推理。如果要精准计算,只能处理当期以前已知的,并且通过查表的方式获得。

   由前文可知,1章19岁7闰,1蔀4章76岁28闰,1纪20蔀1520岁560闰,考虑到朝代的更替、历法的更替等若干因素,以1蔀76岁刻度做切片数据上能保证一定的准确性,2纪40蔀3040年已基本可以涵盖干支纪年。也就是说,构建一个40笔蔀首的年朔数据表即可,每蔀内的年月日节气数据可按规则推导出(若想数据更为准确,亦可按1章19岁刻度进行切片,即160笔章首数据表)。至于合朔在子正的数据,人工核验史书进行校准。

    秦朝及汉初(公元前221年-前104年)的历法沿用颛顼历的月序。颛顼历以建亥(即十月)为年首,但仍称建亥十月。月的数序是十月、十一月、十二月、正月、二月、…、九月,闰月置于年终,称为后九月。汉朝建立后基本沿用秦历,只作了少许修改,直到汉武帝太初元年(公元前104年)才颁行新法,以建寅(正月)为年首,并把闰月置于无中气的月份。四分术一般以汉文帝后元三年(公元前161年)庚辰为入元之年,头一年(公元前162年)十一月甲子夜半为朔旦冬至,即计算历日的始点。

图片

   众所周知,在编写计算机程序上处理分数较为费时,所以一般采用浮点数运算处理十进制小数。

    下面的方法可用来编定一岁内的所有农历日月,即从某年十一月冬至日起到下一年十一月冬至日前一日为止的所有日月。以下用N(y)表示年首最接近公历y年1月1日的农历年,如N(2022)指始于公元2022年2月1号的农历壬寅年,终于2023年1月21号。用W(y)表示落在公历y年的冬至日期,S(y)则表示从N(y-1)的建子月冬至到N(y)建子月冬至前一日的那段时间,即农历的岁。

(1) 计算两冬至的日期W(y-1)和W(y);

(2) 计算在W(y-1)或之前的第一个朔日M(-1)和在W(y)或之前的第一个朔日M(11);

(3) 求得从M(-1)到M(11)之间的朔的数目Ly(包括M(-1)但不包括M(11)),L(y)是最接近(M(11)-M(-1))/29.53的整数;

(4) a. 如果L(y)=12,则S(y)是平岁。计算M(-1)之后的十一个朔日,依次标以M(0)、M(1)、…、M(10);

(4) b. 如果L(y)=13,则S(y)是闰岁。计算M(-1)之后的十二个朔日以及在S(y)内的所有中气日期,然后找出最先出现不含中气的闰月。把平月的朔日日期依次标以M(0)、M(1)、…、M(10)。闰月的朔日日期则标以M(i)r,这里的i表示闰月之前的那个月的编号;

(5) M(-1)是农历年N(y-1)的十一月初一、M(0)是十二月初一、M(1)是农历年N(y)的正月初一、…、M(10)是农历年N(y)的十月初一。如果有闰月,闰月的初一是M(i)r。

   若计算年、月、日干支,以蔀首年、月、日初值,求出距离蔀首的积岁、积月、积日,再每对60取余即可。干支推算可与由公历的推算进行对比校验。

    以上都是农历年月日的推法,但还没有匹配公历相应的年月日,以下是常见方法(以公元1年为起始点):

(1) 实际天数计算

以2022年11月16日为例:

A=(计算年-1)*365+(累计到计算年的月日天数)

(2022-1)*365+(31+28+31+30+31+30+31+31+30+31+16)=737665+320=737985天

B=(计算年-1)/4-(误差修正值)+(当年闰年3月1号后为1否则为0)

误差修正值(涉及改历,不详述):

公元元年1月1日到1582年10月14日为0;

公元1582年10月15日到1670年12月31日为10;

从公元1701年1月1日起,每增加1个世纪累加1,但能被400除尽的不累加。

示例:1701年1月1日起误差值为11,1802年起为12,1901年起为13,2001年起仍为13,因为2000能被400整除,所以不累加,2101起为14。

即B=505-13+0=492天

实际天数T=A+B=737985+492=738477天

(2) 求星期公式

星期=(5+T(实际天数))mod 7 = 738482 mod 7 = 3(即周三)

(3) 干支计算公式

(a) 干支年

公元后年份干支=((计算年 mod 60)-4+60) mod 60= 38(壬寅)

公元前年份干支=(57 - (计算年 mod 60) +60)mod 60

(b) 干支月

干支推月有个口诀:

甲己之年丙作首,乙庚之年戊为头,丙辛必定寻庚起,丁壬壬位顺行流,更有戊癸何方觅,甲寅之上好追求。

记为表格如下:

图片

(c) 干支日

方法一:

日干支序号=(12+T(实际天数)) mod 60 =  9(癸酉)

方法二:

图片

Base=(C/4)+(5y)+(y/4)+(3*(M+1)/5)+d

G=(4C)+ Base-4

Z=(8C)+ Base +6+i

其中:

C是世纪数减1,如2022年是21世纪,则C为20;

y是年份的后两位,如2022年y就是22;

M是月份,如11月M就是11;1月和2月按上一年的13月和14月来算;

d是当月日数,16日d就是16;

奇数月i=0,偶数月i=6;

仍以2022年11月11日计算:

Base = 5+5*22+5+7+16 = 143

G = 4*20+143-5 = 219

Z = 8*20+143+7+0 = 309

日干 = G mod 10 = 219 mod 10 = 9(癸)

日支 = Z mod 12 = 309 mod 12 = 9(酉)

(d) 干支时

干支时推法口诀:

甲己还生甲,乙庚丙作初,丙辛以戊起,丁壬庚子居,戊癸何方发,壬子是真途。

方法类似推月,不再枚举。

9. 思考

命理排盘上一般采用万年历书的干支,但是历朝天文观测点不一样,也就是合朔时间也会有不同,按现代天文知识,1度相差4分钟左右,对于那种夜半合朔齐同的日子,可能就涉及到不同的日子,比如西安和北京,洛阳和北京,经度不一样,合朔时间也必然不一样。以北京时间确立的合朔,在西安的人合朔时间显然要早于北京时间的,如果恰巧合朔齐同,那么按照历书在西安的要比在北京的早一天,从而月、日也可能就不一样,那么一个人的八字排盘该如何考量才是合理的呢?按太阳时即考虑每个地点的经度来计算似乎更为精确。但是一个王朝一旦建立,其历法也就确立,对于史书等干支纪日没有问题,反而利于记载,但是对于术数而言,如个人的命理八字,书上记载的日子或许就不那么准确了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多