天干地支:一套运行三千年的时间编码
把时间记录下来,听着简单,其实是个工程难题。没有钟表的年代,要回答今天是什么日子,得先有一套公认的计数规则。天干地支就是古人给出的方案,而且一用就是几千年。
先看结构
十干,甲乙丙丁戊己庚辛壬癸。十二支,子丑寅卯辰巳午未申酉戌亥。把它们看成两个计数器再合适不过:一个十格一轮回,一个十二格一轮回,各自循环,互相咬合。古人有个很形象的机械想象,日轮和月轮像两个齿轮,转到固定点相会一次,那个相会点叫辰。这个结构和程序里两个不同周期的定时器对表,思路一模一样。
再看周期
关键数字是六十。十和十二的最小公倍数是六十,两个计数器转着转着重新对齐,正好排出六十个互不重复的组合,这就是六十甲子。所以六十甲子不是六十种说法,而是一个周期函数的完整周期,跑完六十步回到起点,下一轮接着走。
它的连续性更值得注意。普通月份十二个月一轮,过完十二月就回到一月。干支纪月不是这样走的,子月之后不回子月,而是顺着序列继续丑月寅月,一路走下去。年界也有讲究,民俗按正月初一换属相,干支按立春换年,两套边界各有各的用途,互不打架。这说明干支不是民俗里的小转盘,而是一条不间断的计数长河,年取一段,月取一段,日取一段,底下是同一个序列在流动。再往上,这套系统还尝试把年月日统一成六十进制,让整个历法共用一条序列。
历法就是算法
拆开看,历法无非是一套日历算法:选定起点,按固定步长累加,遇到边界就进位,发现漂移就校准。干支系统也是这个套路,年初定点,逐日累加,六十一轮。三千年前的设计今天还挂在日历上,这种稳定性已经很能说明问题。
编码就得校准
但只要是编码,就有精度和边界问题。古人立竿测影,校正回归年积累的误差。今天用到干支纪时的场合,讲究真太阳时,也是同一种意识:钟表时间是统一编码,太阳位置才是原始信号,经度每差十五度,太阳时就差一小时。解码之前先把时钟对回信号源,这一步省不掉。编码跑得再久,也要定期对表,否则信号和时钟就会错开。
说到底
天干地支教给我们一个很朴素的道理:时间是可以被编码的。凡是编码,就有边界、有误差、有校准。古人认真对待这三件事,这套编码才跑了几千年不散架。今天回头看,它更像一台老式但可靠的计时机器,齿轮咬合清楚,周期交代明白,值得尊敬。
本文仅为程序视角的文化结构科普,不构成职业、婚恋、医疗或投资决策建议。