diff --git a/src/main/java/com/nlf/calendar/Lunar.java b/src/main/java/com/nlf/calendar/Lunar.java index e813b90..45a9ab9 100644 --- a/src/main/java/com/nlf/calendar/Lunar.java +++ b/src/main/java/com/nlf/calendar/Lunar.java @@ -1541,7 +1541,7 @@ public class Lunar{ } /** - * 获取值年九星 + * 获取值年九星(流年紫白星起例歌诀:年上吉星论甲子,逐年星逆中宫起;上中下作三元汇,一上四中七下兑。) * @return 值年九星 */ public NineStar getYearNineStar(){ @@ -1552,6 +1552,95 @@ public class Lunar{ return new NineStar(index); } + /** + * 获取值月九星(月紫白星歌诀:子午卯酉八白起,寅申巳亥二黑求,辰戌丑未五黄中。) + * @return 值月九星 + */ + public NineStar getMonthNineStar(){ + int start = 2; + String yearZhi = getYearZhi(); + if ("子午卯酉".contains(yearZhi)) { + start = 8; + } else if ("辰戌丑未".contains(yearZhi)) { + start = 5; + } + // 寅月起,所以需要-2 + int monthIndex = monthZhiIndex-2; + int index = start-monthIndex-1; + if(index<0){ + index += 9; + } + return new NineStar(index); + } + + /** + * 获取值日九星(日家紫白星歌诀:日家白法不难求,二十四气六宫周;冬至雨水及谷雨,阳顺一七四中游;夏至处暑霜降后,九三六星逆行求。) + * @return 值日九星 + */ + public NineStar getDayNineStar(){ + //顺逆 + String solarYmd = solar.toYmd(); + String yuShui = jieQi.get("雨水").toYmd(); + String guYu = jieQi.get("谷雨").toYmd(); + String xiaZhi = jieQi.get("夏至").toYmd(); + String chuShu = jieQi.get("处暑").toYmd(); + String shuangJiang = jieQi.get("霜降").toYmd(); + + int start = 6; + boolean asc = false; + if(solarYmd.compareTo(jieQi.get("冬至").toYmd())>=0 && solarYmd.compareTo(yuShui)<0){ + asc = true; + start = 1; + } else if(solarYmd.compareTo(yuShui)>=0 && solarYmd.compareTo(guYu)<0){ + asc = true; + start = 7; + } else if(solarYmd.compareTo(guYu)>=0 && solarYmd.compareTo(xiaZhi)<0){ + asc = true; + start = 4; + } else if(solarYmd.compareTo(xiaZhi)>=0 && solarYmd.compareTo(chuShu)<0){ + start = 9; + } else if(solarYmd.compareTo(chuShu)>=0 && solarYmd.compareTo(shuangJiang)<0){ + start = 3; + } + int ganZhiIndex = LunarUtil.getJiaZiIndex(getDayInGanZhi())%9; + int index = asc?start+ganZhiIndex-1:start-ganZhiIndex-1; + if(index>8){ + index -= 9; + } + if(index<0){ + index += 9; + } + return new NineStar(index); + } + + /** + * 获取值时九星(时家紫白星歌诀:三元时白最为佳,冬至阳生顺莫差,孟日七宫仲一白,季日四绿发萌芽,每把时辰起甲子,本时星耀照光华,时星移入中宫去,顺飞八方逐细查。夏至阴生逆回首,孟归三碧季加六,仲在九宫时起甲,依然掌中逆轮跨。) + * @return 值时九星 + */ + public NineStar getTimeNineStar(){ + //顺逆 + String solarYmd = solar.toYmd(); + boolean asc = false; + if(solarYmd.compareTo(jieQi.get("冬至").toYmd())>=0 && solarYmd.compareTo(jieQi.get("夏至").toYmd())<0){ + asc = true; + } + int start = asc?7:3; + String dayZhi = getDayZhi(); + if ("子午卯酉".contains(dayZhi)) { + start = asc?1:9; + } else if ("辰戌丑未".contains(dayZhi)) { + start = asc?4:6; + } + int index = asc?start+timeZhiIndex-1:start-timeZhiIndex-1; + if(index>8){ + index -= 9; + } + if(index<0){ + index += 9; + } + return new NineStar(index); + } + /** * 获取节气表(节气名称:阳历),节气交接时刻精确到秒,以冬至开头,按先后顺序排列 * @return 节气表 diff --git a/src/main/java/com/nlf/calendar/NineStar.java b/src/main/java/com/nlf/calendar/NineStar.java index ff41a71..1715ca0 100644 --- a/src/main/java/com/nlf/calendar/NineStar.java +++ b/src/main/java/com/nlf/calendar/NineStar.java @@ -39,6 +39,9 @@ public class NineStar { /** 太乙九神对应类型 */ public static final String[] TYPE_TAI_YI = {"吉神","凶神","安神","安神","凶神","吉神","凶神","吉神","吉神"}; + /** 太乙九神歌诀(太乙神数) */ + public static final String[] SONG_TAI_YI = {"门中太乙明,星官号贪狼,赌彩财喜旺,婚姻大吉昌,出入无阻挡,参谒见贤良,此行三五里,黑衣别阴阳。","门前见摄提,百事必忧疑,相生犹自可,相克祸必临,死门并相会,老妇哭悲啼,求谋并吉事,尽皆不相宜,只可藏隐遁,若动伤身疾。","出入会轩辕,凡事必缠牵,相生全不美,相克更忧煎,远行多不利,博彩尽输钱,九天玄女法,句句不虚言。","招摇号木星,当之事莫行,相克行人阻,阴人口舌迎,梦寐多惊惧,屋响斧自鸣,阴阳消息理,万法弗违情。","五鬼为天符,当门阴女谋,相克无好事,行路阻中途,走失难寻觅,道逢有尼姑,此星当门值,万事有灾除。","神光跃青龙,财气喜重重,投入有酒食,赌彩最兴隆,更逢相生旺,休言克破凶,见贵安营寨,万事总吉同。","吾将为咸池,当之尽不宜,出入多不利,相克有灾情,赌彩全输尽,求财空手回,仙人真妙语,愚人莫与知,动用虚惊退,反复逆风吹。","坐临太阴星,百祸不相侵,求谋悉成就,知交有觅寻,回风归来路,恐有殃伏起,密语中记取,慎乎莫轻行。","迎来天乙星,相逢百事兴,运用和合庆,茶酒喜相迎,求谋并嫁娶,好合有天成,祸福如神验,吉凶甚分明。"}; + /** 吉凶(玄空风水) */ public static final String[] LUCK_XUAN_KONG = {"吉","凶","凶","吉","凶","吉","凶","吉","吉"}; @@ -168,6 +171,14 @@ public class NineStar { return BA_MEN_QI_MEN[index]; } + /** + * 获取太乙九神歌诀 + * @return 太乙九神歌诀 + */ + public String getSongInTaiYi(){ + return SONG_TAI_YI[index]; + } + /** * 获取九星序号,从0开始 * @return 序号 diff --git a/src/main/java/com/nlf/calendar/util/LunarUtil.java b/src/main/java/com/nlf/calendar/util/LunarUtil.java index 8ae21f9..61be3de 100644 --- a/src/main/java/com/nlf/calendar/util/LunarUtil.java +++ b/src/main/java/com/nlf/calendar/util/LunarUtil.java @@ -1242,7 +1242,7 @@ public class LunarUtil{ * @param ganZhi 干支 * @return 甲子序号 */ - private static int getJiaZiIndex(String ganZhi){ + public static int getJiaZiIndex(String ganZhi){ for(int i=0,j=LunarUtil.JIA_ZI.length;i