最近在研究易经,想从底层了解下易经是什么,目标是将易经程序化。目前市面上有不少易经卜卦的程序了,但是不知道原理的话,也不明白这些已有的卜卦程序对还是不对,而且如果有不同的想法也没办法进一步细化。
既然自己是程序员,就不如自己写一套。
今天记录下易经里面的,公历年转化天干地支的算法。
首先要记住公式,天*计算公式内容如下:
4甲 5乙 6丙 7丁 8戊 9己 0庚 1辛 2壬 3癸
计算方式就是,公历年最后一位数对应公式中的数字就是天干。
地支的计算公式内容如下:
4子(鼠) 5丑(牛) 6寅(虎) 7卯(兔) 8辰(龙) 9巳(蛇) 10午(马) 11未(羊) 0申(猴) 1酉(鸡) 2戌(狗) 3亥(猪)
计算方式是,公历年对12取余数得到的数值对应公式中的数字的就是地支。
比如 2000 年,天干0,对应 庚,地支 2000对12取余,余数为8 对应 辰龙,则 2000 年为庚辰年,龙年。
比如 2004 年,天干4,对应甲,地支 2000对12取余,余数为0 对应 申猴,则 2004 年为甲申年,猴年。
用百度的万年历进行核对,目前确定是没有问题的,最后附上一个简单的java程序。感兴趣欢迎留言讨论。
public class NianUtils {
public static void main(String[] args) {
NianUtils nu = new NianUtils();
int year = 2000;
for (int i = 0; i < 30; i ) {
System.out.println("公历年:" year ", 对应天干地支:" nu.getTiangan(year) nu.getDizhi(year) ",生肖:" nu.getShengxiao(year));
year = year 1;
}
}
public String getTiangan(Integer year) {
Map<Integer, String> tianganMap = new HashMap<>();
tianganMap.put(4, "甲");
tianganMap.put(5, "乙");
tianganMap.put(6, "丙");
tianganMap.put(7, "丁");
tianganMap.put(8, "戊");
tianganMap.put(9, "己");
tianganMap.put(0, "庚");
tianganMap.put(1, "辛");
tianganMap.put(2, "壬");
tianganMap.put(3, "癸");
String[] yearArr = (year "").split("");
Integer lastNum = Integer.parseInt(yearArr[yearArr.length - 1]);
return tianganMap.get(lastNum);
}
public String getDizhi(Integer year) {
Map<Integer, String> dizhiMap = new HashMap<>();
dizhiMap.put(4, "子");
dizhiMap.put(5, "丑");
dizhiMap.put(6, "寅");
dizhiMap.put(7, "卯");
dizhiMap.put(8, "辰");
dizhiMap.put(9, "巳");
dizhiMap.put(10, "午");
dizhiMap.put(11, "未");
dizhiMap.put(0, "申");
dizhiMap.put(1, "酉");
dizhiMap.put(2, "戌");
dizhiMap.put(3, "亥");
Integer yushuNum = year % 12;
return dizhiMap.get(yushuNum);
}
public String getShengxiao(Integer year) {
Map<Integer, String> shengxiaoMap = new HashMap<>();
shengxiaoMap.put(4, "鼠");
shengxiaoMap.put(5, "牛");
shengxiaoMap.put(6, "虎");
shengxiaoMap.put(7, "兔");
shengxiaoMap.put(8, "龙");
shengxiaoMap.put(9, "蛇");
shengxiaoMap.put(10, "马");
shengxiaoMap.put(11, "羊");
shengxiaoMap.put(0, "猴");
shengxiaoMap.put(1, "鸡");
shengxiaoMap.put(2, "狗");
shengxiaoMap.put(3, "猪");
Integer yushuNum = year % 12;
return shengxiaoMap.get(yushuNum);
}
}
以上程序运行的结果如下:
公历年:2000, 对应天干地支:庚辰,生肖:龙
公历年:2001, 对应天干地支:辛巳,生肖:蛇
公历年:2002, 对应天干地支:壬午,生肖:马
公历年:2003, 对应天干地支:癸未,生肖:羊
公历年:2004, 对应天干地支:甲申,生肖:猴
公历年:2005, 对应天干地支:乙酉,生肖:鸡
公历年:2006, 对应天干地支:丙戌,生肖:狗
公历年:2007, 对应天干地支:丁亥,生肖:猪
公历年:2008, 对应天干地支:戊子,生肖:鼠
公历年:2009, 对应天干地支:己丑,生肖:牛
公历年:2010, 对应天干地支:庚寅,生肖:虎
公历年:2011, 对应天干地支:辛卯,生肖:兔
公历年:2012, 对应天干地支:壬辰,生肖:龙
公历年:2013, 对应天干地支:癸巳,生肖:蛇
公历年:2014, 对应天干地支:甲午,生肖:马
公历年:2015, 对应天干地支:乙未,生肖:羊
公历年:2016, 对应天干地支:丙申,生肖:猴
公历年:2017, 对应天干地支:丁酉,生肖:鸡
公历年:2018, 对应天干地支:戊戌,生肖:狗
公历年:2019, 对应天干地支:己亥,生肖:猪
公历年:2020, 对应天干地支:庚子,生肖:鼠
公历年:2021, 对应天干地支:辛丑,生肖:牛
公历年:2022, 对应天干地支:壬寅,生肖:虎
公历年:2023, 对应天干地支:癸卯,生肖:兔
公历年:2024, 对应天干地支:甲辰,生肖:龙
公历年:2025, 对应天干地支:乙巳,生肖:蛇
公历年:2026, 对应天干地支:丙午,生肖:马
公历年:2027, 对应天干地支:丁未,生肖:羊
公历年:2028, 对应天干地支:戊申,生肖:猴
公历年:2029, 对应天干地支:己酉,生肖:鸡