1
0
mirror of synced 2025-12-24 22:38:00 +08:00

增加纳音;优化代码。

This commit is contained in:
6tail
2020-04-05 12:41:46 +08:00
parent 3480e75356
commit 8247a909f3
6 changed files with 228 additions and 43 deletions

View File

@@ -55,14 +55,10 @@ lunar是一个无依赖的支持阳历和阴历的日历工具库。
public class LunarSample{
public static void main(String[] args){
//今天
Lunar date = new Lunar();
//输出阴历信息
System.out.println(date.toFullString());
//输出阳历信息
System.out.println(date.getSolar().toFullString());
System.out.println();
//Lunar date = new Lunar();
//指定阴历的某一天
date = new Lunar(1986,4,21);
Lunar date = new Lunar(1986,4,21);
System.out.println(date.toFullString());
System.out.println(date.getSolar().toFullString());
}
@@ -70,10 +66,7 @@ lunar是一个无依赖的支持阳历和阴历的日历工具库。
输出结果:
贰零壹陆年捌月初八 丙申(猴)年丁酉月癸巳日 北方玄武 斗木獬 彭祖百忌[癸不词讼理弱敌强 巳不远行财物伏藏] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁亥)猪] 刹[东]
2016-09-08 闰年 星期四 (世界扫盲日) 处女座
壹玖捌陆年肆月廿一 丙寅(虎)年癸巳月癸酉日 北方玄武 危月燕 彭祖百忌[癸不词讼理弱敌强 酉不会客醉坐颠狂] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁卯)兔] 刹[东]
壹玖捌陆年肆月廿一 丙寅(虎)年 癸巳(蛇)月 癸酉(鸡)日 纳音[炉中火 长流水 剑锋金] 北方玄武 危月燕 彭祖百忌[癸不词讼理弱敌强 酉不会客醉坐颠狂] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁卯)兔] 刹[东]
1986-05-29 星期四 双子座
## 文档

View File

@@ -55,14 +55,10 @@ If you will use jars in your projects, I suggest you to download latest snapshot
public class LunarSample{
public static void main(String[] args){
//今天
Lunar date = new Lunar();
//输出阴历信息
System.out.println(date.toFullString());
//输出阳历信息
System.out.println(date.getSolar().toFullString());
System.out.println();
//Lunar date = new Lunar();
//指定阴历的某一天
date = new Lunar(1986,4,21);
Lunar date = new Lunar(1986,4,21);
System.out.println(date.toFullString());
System.out.println(date.getSolar().toFullString());
}
@@ -70,10 +66,7 @@ If you will use jars in your projects, I suggest you to download latest snapshot
Output:
贰零壹陆年捌月初八 丙申(猴)年丁酉月癸巳日 北方玄武 斗木獬 彭祖百忌[癸不词讼理弱敌强 巳不远行财物伏藏] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁亥)猪] 刹[东]
2016-09-08 闰年 星期四 (世界扫盲日) 处女座
壹玖捌陆年肆月廿一 丙寅(虎)年癸巳月癸酉日 北方玄武 危月燕 彭祖百忌[癸不词讼理弱敌强 酉不会客醉坐颠狂] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁卯)兔] 刹[东]
壹玖捌陆年肆月廿一 丙寅(虎)年 癸巳(蛇)月 癸酉(鸡)日 纳音[炉中火 长流水 剑锋金] 北方玄武 危月燕 彭祖百忌[癸不词讼理弱敌强 酉不会客醉坐颠狂] 喜神方位[](东南) 阳贵神方位[](东南) 阴贵神方位[](正东) 福神方位[](正西) 财神方位[](正南) 冲[(丁卯)兔] 刹[东]
1986-05-29 星期四 双子座
## Documentation

View File

@@ -136,29 +136,97 @@ public class Lunar{
* 获取年份的天干
*
* @return 天干,如辛
* @deprecated 使用getYearGan
*/
public String getGan(){
return LunarUtil.GAN[(year-4)%10+1];
}
/**
* 获取年份的天干
*
* @return 天干,如辛
*/
public String getYearGan(){
return LunarUtil.GAN[(year-4)%10+1];
}
/**
* 获取年份的地支
*
* @return 地支,如亥
* @deprecated 使用getYearZhi
*/
public String getZhi(){
return LunarUtil.ZHI[(year-4)%12+1];
}
/**
* 获取生肖
* 获取年份的地支
*
* @return 生肖,如
* @return 地支,如
*/
public String getYearZhi(){
return LunarUtil.ZHI[(year-4)%12+1];
}
/**
* 获取干支纪年
* @return 年份的干支,如辛亥
*/
public String getYearInGanZhi(){
return getYearGan()+getYearZhi();
}
/**
* 获取年生肖
*
* @return 年生肖,如虎
* @deprecated 使用getYearShengXiao
*/
public String getShengxiao(){
return LunarUtil.SHENGXIAO[(year-4)%12+1];
}
/**
* 获取年生肖
*
* @return 年生肖,如虎
*/
public String getYearShengXiao(){
return LunarUtil.SHENGXIAO[(year-4)%12+1];
}
/**
* 获取月生肖
*
* @return 月生肖,如虎
*/
public String getMonthShengXiao(){
String zhi = getMonthZhi();
for(int i=0,j=LunarUtil.ZHI.length;i<j;i++){
if(LunarUtil.ZHI[i].equals(zhi)){
return LunarUtil.SHENGXIAO[i];
}
}
return "";
}
/**
* 获取日生肖
*
* @return 日生肖,如虎
*/
public String getDayShengXiao(){
String zhi = getDayZhi();
for(int i=0,j=LunarUtil.ZHI.length;i<j;i++){
if(LunarUtil.ZHI[i].equals(zhi)){
return LunarUtil.SHENGXIAO[i];
}
}
return "";
}
/**
* 获取中文的年
*
@@ -352,12 +420,27 @@ public class Lunar{
* @return 干支纪月,如己卯
*/
public String getMonthInGanZhi(){
return getMonthGan()+getMonthZhi();
}
/**
* 获取月天干
* @return 月天干,如己
*/
public String getMonthGan(){
int m = Math.abs(month)-1;
int yearGanIndex = (year-4)%10;
int offset = (yearGanIndex%5+1)*2;
String monthGan = LunarUtil.GAN[(m+offset)%10+1];
String monthZhi = LunarUtil.ZHI[(m+LunarUtil.BASE_MONTH_ZHI_INDEX)%12+1];
return monthGan+monthZhi;
return LunarUtil.GAN[(m+offset)%10+1];
}
/**
* 获取月地支
* @return 月地支,如卯
*/
public String getMonthZhi(){
int m = Math.abs(month)-1;
return LunarUtil.ZHI[(m+LunarUtil.BASE_MONTH_ZHI_INDEX)%12+1];
}
/**
@@ -366,7 +449,25 @@ public class Lunar{
* @return 干支纪日,如己卯
*/
public String getDayInGanZhi(){
return LunarUtil.GAN[dayGanIndex+1]+LunarUtil.ZHI[dayZhiIndex+1];
return getDayGan()+getDayZhi();
}
/**
* 获取日天干
*
* @return 日天干,如甲
*/
public String getDayGan(){
return LunarUtil.GAN[dayGanIndex+1];
}
/**
* 获取日地支
*
* @return 日地支,如卯
*/
public String getDayZhi(){
return LunarUtil.ZHI[dayZhiIndex+1];
}
/**
@@ -470,7 +571,7 @@ public class Lunar{
* @return 冲,如申
*/
public String getChong(){
return LunarUtil.CHONG.get(LunarUtil.ZHI[dayZhiIndex+1]);
return LunarUtil.CHONG.get(getDayZhi());
}
/**
@@ -478,8 +579,7 @@ public class Lunar{
* @return 无情之克的冲天干,如甲
*/
public String getChongGan(){
String chong = LunarUtil.GAN[dayGanIndex+1];
return LunarUtil.CHONG_GAN.get(chong);
return LunarUtil.CHONG_GAN.get(getDayGan());
}
/**
@@ -487,8 +587,7 @@ public class Lunar{
* @return 有情之克的冲天干,如甲
*/
public String getChongGanTie(){
String chong = LunarUtil.GAN[dayGanIndex+1];
return LunarUtil.CHONG_GAN_TIE.get(chong);
return LunarUtil.CHONG_GAN_TIE.get(getDayGan());
}
/**
@@ -518,23 +617,56 @@ public class Lunar{
* @return 刹,如北
*/
public String getSha(){
return LunarUtil.SHA.get(LunarUtil.ZHI[dayZhiIndex+1]);
return LunarUtil.SHA.get(getDayZhi());
}
/**
* 获取年纳音
* @return 年纳音,如剑锋金
*/
public String getYearNaYin(){
return LunarUtil.NAYIN.get(getYearInGanZhi());
}
/**
* 获取月纳音
* @return 月纳音,如剑锋金
*/
public String getMonthNaYin(){
return LunarUtil.NAYIN.get(getMonthInGanZhi());
}
/**
* 获取日纳音
* @return 日纳音,如剑锋金
*/
public String getDayNaYin(){
return LunarUtil.NAYIN.get(getDayInGanZhi());
}
public String toFullString(){
StringBuilder s = new StringBuilder();
s.append(toString());
s.append(" ");
s.append(getGan());
s.append(getZhi());
s.append(getYearInGanZhi());
s.append("(");
s.append(getShengxiao());
s.append(")");
s.append("");
s.append(getYearShengXiao());
s.append(")");
s.append(getMonthInGanZhi());
s.append("");
s.append("(");
s.append(getMonthShengXiao());
s.append(")月 ");
s.append(getDayInGanZhi());
s.append("");
s.append("(");
s.append(getDayShengXiao());
s.append(")日");
s.append(" 纳音[");
s.append(getYearNaYin());
s.append(" ");
s.append(getMonthNaYin());
s.append(" ");
s.append(getDayNaYin());
s.append("]");
for(String f:getFestivals()){
s.append(" (");
s.append(f);

View File

@@ -416,6 +416,73 @@ public class LunarUtil{
}
};
/** 纳音 */
public static final Map<String,String> NAYIN = new HashMap<String,String>(){
private static final long serialVersionUID = -1;
{
put("甲子","海中金");
put("甲午","沙中金");
put("丙寅","炉中火");
put("丙申","山下火");
put("戊辰","大林木");
put("戊戌","平地木");
put("庚午","路旁土");
put("庚子","壁上土");
put("壬申","剑锋金");
put("壬寅","金箔金");
put("甲戌","山头火");
put("甲辰","覆灯火");
put("丙子","涧下水");
put("丙午","天河水");
put("戊寅","城头土");
put("戊申","大驿土");
put("庚辰","白蜡金");
put("庚戌","钗钏金");
put("壬午","杨柳木");
put("壬子","桑柘木");
put("甲申","泉中水");
put("甲寅","大溪水");
put("丙戌","屋上土");
put("丙辰","沙中土");
put("戊子","霹雳火");
put("戊午","天上火");
put("庚寅","松柏木");
put("庚申","石榴木");
put("壬辰","长流水");
put("壬戌","大海水");
put("乙丑","海中金");
put("乙未","沙中金");
put("丁卯","炉中火");
put("丁酉","山下火");
put("己巳","大林木");
put("己亥","平地木");
put("辛未","路旁土");
put("辛丑","壁上土");
put("癸酉","剑锋金");
put("癸卯","金箔金");
put("乙亥","山头火");
put("乙巳","覆灯火");
put("丁丑","涧下水");
put("丁未","天河水");
put("己卯","城头土");
put("己酉","大驿土");
put("辛巳","白蜡金");
put("辛亥","钗钏金");
put("癸未","杨柳木");
put("癸丑","桑柘木");
put("乙酉","泉中水");
put("乙卯","大溪水");
put("丁亥","屋上土");
put("丁巳","沙中土");
put("己丑","霹雳火");
put("己未","天上火");
put("辛卯","松柏木");
put("辛酉","石榴木");
put("癸巳","长流水");
put("癸亥","大海水");
}
};
protected LunarUtil(){}
/**

View File

@@ -15,7 +15,7 @@ public class LunarTest {
public void test(){
Lunar date = new Lunar(2019,3,27);
Assert.assertEquals("贰零壹玖年叁月廿七",date.toString());
Assert.assertEquals("贰零壹玖年叁月廿七 己亥(猪)年戊辰月戊戌日 (七殿泰山王诞) 西方白虎 娄金狗 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 刹[北]",date.toFullString());
Assert.assertEquals("贰零壹玖年叁月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 纳音[平地木 大林木 平地木] (七殿泰山王诞) 西方白虎 娄金狗 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 刹[北]",date.toFullString());
Assert.assertEquals("2019-05-01",date.getSolar().toString());
Assert.assertEquals("2019-05-01 星期三 (劳动节) 金牛座",date.getSolar().toFullString());
}

View File

@@ -17,7 +17,7 @@ public class SolarTest {
Assert.assertEquals("2019-05-01",date.toString());
Assert.assertEquals("2019-05-01 星期三 (劳动节) 金牛座",date.toFullString());
Assert.assertEquals("贰零壹玖年叁月廿七",date.getLunar().toString());
Assert.assertEquals("贰零壹玖年叁月廿七 己亥(猪)年戊辰月戊戌日 (七殿泰山王诞) 西方白虎 娄金狗 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 刹[北]",date.getLunar().toFullString());
Assert.assertEquals("贰零壹玖年叁月廿七 己亥(猪)年 戊辰(龙)月 戊戌(狗)日 纳音[平地木 大林木 平地木] (七殿泰山王诞) 西方白虎 娄金狗 彭祖百忌[戊不受田田主不祥 戌不吃犬作怪上床] 喜神方位[巽](东南) 阳贵神方位[艮](东北) 阴贵神方位[坤](西南) 福神方位[坎](正北) 财神方位[坎](正北) 冲[(壬辰)龙] 刹[北]",date.getLunar().toFullString());
}
}