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