计算原理:为年、月、日、时分别找到一个起点,也就是干支纪法的第1个编号“甲子”,由于60个干支编号是循环使用的,只要算出其他时点与起点的差值,把差值除以60取其余数即可得到干支编号。
第一步:创建一张EXCEL表,表名取“干支”,把60个干支编号按顺序放到表中以备查用(如下图)。
第三步:计算干支纪年,在同一EXCEL文件创建新表,表名取“年”,内容如下图所示。
其中,B2单元格的1984是查阅日历所得,这是距今最近的一个“甲子年”,B3单元格是出生年份,使用公式=计算结果!B3直接引用已经输入的农历出生年,B4单元格计算所得,公式为=MOD((B3-B2),60),其值为两个年份差除以60所得的余数,即我们所求的干支序号,此例为47,查阅上述“干支”表第4行第7列即可得1971年的干支纪年“辛亥”,把查表过程转换成计算公式=INDIRECT(ADDRESS(INT(B4/10)+2,MOD(B4,10)+2,1,1,"干支"))输入到B5单元格,就完成了干支纪年的计算过程。
第四步:计算干支纪月,在同一EXCEL文件创建新表,表名取“月”,内容如下图所示。
其中,B2及B3单元格的农历1983年11月是一个“甲子月”,这个数值由以下方法推算而来。农历1年12个月(不算闰月),60个干支编号5年一循环,因为地支符号也是12个,与12个月刚好搭配,也就是各月的的地支固定不变(以冬至所在的11月为起点,即记为子月)。至于月的天干,因为是5年一循环,所以与年的天干有固定的对照关系,即年天干为“甲”时,甲月为9月;年天干为“乙”时,甲月上推两月为7月(因10个天干符号比12个月少2个),如此类推可得,年天干为“戊”或“癸”时“甲”恰在“子月”,即“甲子月”只会出现在年天干为“戊”或“癸”的年份。在第三步中我们已知1984年是甲子年,1983年就一定是癸亥年,天干正好是“癸”,因此可知1983年11月是“甲子月”。确定了甲子月,我们再把农历出生年月使用公式=计算结果!B3和=计算结果!B4分别引用到B3和C3单元格,在B4单元格输入公式=MOD((B3-B2)*12+C3-C2,60)计算两个月度差除以60的余数,得到农历1971年10月的干支序号为35,比照第四步,在B5单元格输入公式=INDIRECT(ADDRESS(INT(B4/10)+2,MOD(B4,10)+2,1,1,"干支"))查得该月为“己亥月”。
注意:如果恰巧是农历闰月出生的,那就需要查到当月中某一24节气所在的那一天(闰月只有一个),这一天之前的日子其月天干等于上一月,之后的日子则等于下一月。另外,据有关专家部门解释,农历每月的干支并不固定,主要应由节气来定,导致月初几天一般算做上月干支,如果是年初还会有年干支的调整(比如2010年春节前十天出生的人就应该算属虎了,直到明年大年初二出生的人才算属兔)。小子实在不喜欢这种做法,这样干支纪月就失去月的意义啦,又或者说是我们农历的月度划分出了问题,所以本算法中把一个农历月记为同一干支(年更是如此,没有人会把自己的属相精确到如此地步来计),如果您不喜欢就只好去查万年历了(小子使用的是国家授时中心发布的日梭万年历)。
第五步:计算干支纪日,在同一EXCEL文件创建新表,表名取“日”,内容如下图所示。
第六步:计算干支纪时,在同一EXCEL文件创建新表,表名取“时”,内容如下图所示。
最后,我们把上述4个年、月、日、时的干支编号组合在一起放到“计算结果”表的B6单元格,公式为:=年!B5&""&月!B5&""&日!B5&""&时!B5,得出如下结果: