纯属业余时间的消遣,姑妄了解一些传统文化的常识问题。
1. 天干与地支
十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥干支的一个循环为一个甲子,共经历60年。天干是10,地支是12,如果是笛卡尔积进行配对的话,周期就是1了。
我们来看一个完整的甲子:
甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥
丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥
戊子 己丑 庚寅 辛卯 壬辰 癸巳 甲午 乙未 丙申 丁酉 戊戌 己亥
庚子 辛丑 壬寅 癸卯 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥
壬子 癸丑 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥
不是笛卡尔积,而是最小公倍数。
>> tiangan = '甲乙丙丁戊己庚辛壬癸'>> dizhi = '子丑寅卯辰巳午未申酉戌亥'>> [(i, j) for i, j in zip(tiangan*6, dizhi*5)]
2. 甲子年份的计算
已知公元第4年是第一个甲子年,那么每一个甲子年的年份的计算公式是:
y=60×n+4
也即距今最近的甲子年为 60*33+4 = 1984.
3. 年份与天干地支
我们又该如何根据年份(比如)获取它对应的天干地支的纪年方式呢?
因为一个甲子(从开始的甲子年到最终的癸亥年)是严格有序的,故可维护一张,对甲子的偏移到天干地支纪年的映射表。
偏移可通过如下的方式获取:
offset=(y−4)%60
def year2tiangandizhi(y):return (y-4)%60table = []with open('./jiazi.txt') as f:for line in f:table += line.split(' ')print(table[year2tiangandizhi()])# 丙申
其中jiazi.txt
的文件内容为:
甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥戊子 己丑 庚寅 辛卯 壬辰 癸巳 甲午 乙未 丙申 丁酉 戊戌 己亥庚子 辛丑 壬寅 癸卯 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥壬子 癸丑 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥
4. 地支与十二生肖
生肖是12个,地支也是12个,可见生肖与地支是1对1的关系,所以不管,是丙申,年还是壬申年,都是猴年。
子丑寅卯:鼠、牛、虎、兔辰巳午未:龙、蛇、马、羊申酉戌亥:猴、鸡、狗、猪
5. 天干与五行
甲乙东方木
丙丁南方火
戊己四季土
庚辛西方金
壬癸北方水
所以“丙去”,因为“丙丁”属火,“丙去”的意思就是“烧去”。