1
0
mirror of synced 2025-12-18 03:18:00 +08:00

Merge remote-tracking branch 'remotes/origin/v1.1.0-SNAPSHOT'

This commit is contained in:
6tail
2020-05-27 00:08:39 +08:00
2 changed files with 61 additions and 12 deletions

View File

@@ -60,6 +60,10 @@ public class Lunar{
private int dayGanIndex; private int dayGanIndex;
/** 日对应的地支下标0-11 */ /** 日对应的地支下标0-11 */
private int dayZhiIndex; private int dayZhiIndex;
/** 日对应的天干下标最精确的供八字用晚子时算第二天0-9 */
private int dayGanIndexExact;
/** 日对应的地支下标最精确的供八字用晚子时算第二天0-11 */
private int dayZhiIndexExact;
/** 月对应的天干下标以节交接当天起算0-9 */ /** 月对应的天干下标以节交接当天起算0-9 */
private int monthGanIndex; private int monthGanIndex;
/** 月对应的地支下标以节交接当天起算0-11 */ /** 月对应的地支下标以节交接当天起算0-11 */
@@ -326,6 +330,25 @@ public class Lunar{
int addDays = (dayOffset + LunarUtil.BASE_DAY_GANZHI_INDEX)%60; int addDays = (dayOffset + LunarUtil.BASE_DAY_GANZHI_INDEX)%60;
dayGanIndex = addDays%10; dayGanIndex = addDays%10;
dayZhiIndex = addDays%12; dayZhiIndex = addDays%12;
int dayGanExact = dayGanIndex;
int dayZhiExact = dayZhiIndex;
// 晚子时(夜子/子夜)应算作第二天
String hm = (hour<10?"0":"")+hour+":"+(minute<10?"0":"")+minute;
if(hm.compareTo("23:00")>=0&&hm.compareTo("23:59")<=0){
dayGanExact++;
if(dayGanExact>=10){
dayGanExact -= 10;
}
dayZhiExact++;
if(dayZhiExact>=12){
dayZhiExact -= 12;
}
}
dayGanIndexExact = dayGanExact;
dayZhiIndexExact = dayZhiExact;
} }
/** /**
@@ -334,15 +357,7 @@ public class Lunar{
private void computeTime(){ private void computeTime(){
String hm = (hour<10?"0":"")+hour+":"+(minute<10?"0":"")+minute; String hm = (hour<10?"0":"")+hour+":"+(minute<10?"0":"")+minute;
timeZhiIndex = LunarUtil.getTimeZhiIndex(hm); timeZhiIndex = LunarUtil.getTimeZhiIndex(hm);
int dayGan = dayGanIndex; timeGanIndex = (dayGanIndexExact%5*2+timeZhiIndex)%10;
// 晚子时(夜子/子夜)应算作第二天
if(hm.compareTo("23:00")>=0&&hm.compareTo("23:59")<=0){
dayGan++;
if(dayGan>=10){
dayGan -= 10;
}
}
timeGanIndex = (dayGan%5*2+timeZhiIndex)%10;
} }
/** /**
@@ -559,6 +574,15 @@ public class Lunar{
return getDayGan()+getDayZhi(); return getDayGan()+getDayZhi();
} }
/**
* 获取干支纪日(日柱,晚子时算第二天)
*
* @return 干支纪日(日柱),如己卯
*/
public String getDayInGanZhiExact(){
return getDayGanExact()+getDayZhiExact();
}
/** /**
* 获取日天干 * 获取日天干
* *
@@ -568,6 +592,15 @@ public class Lunar{
return LunarUtil.GAN[dayGanIndex+1]; return LunarUtil.GAN[dayGanIndex+1];
} }
/**
* 获取日天干(晚子时算第二天)
*
* @return 日天干,如甲
*/
public String getDayGanExact(){
return LunarUtil.GAN[dayGanIndexExact+1];
}
/** /**
* 获取日地支 * 获取日地支
* *
@@ -577,6 +610,15 @@ public class Lunar{
return LunarUtil.ZHI[dayZhiIndex+1]; return LunarUtil.ZHI[dayZhiIndex+1];
} }
/**
* 获取日地支(晚子时算第二天)
*
* @return 日地支,如卯
*/
public String getDayZhiExact(){
return LunarUtil.ZHI[dayZhiIndexExact+1];
}
/** /**
* 获取年生肖 * 获取年生肖
* *
@@ -1170,11 +1212,10 @@ public class Lunar{
*/ */
public List<String> getBaZi(){ public List<String> getBaZi(){
List<String> l = new ArrayList<String>(4); List<String> l = new ArrayList<String>(4);
String timeGan = LunarUtil.GAN[(dayGanIndex%5*12+timeZhiIndex)%10+1];
l.add(getYearInGanZhiExact()); l.add(getYearInGanZhiExact());
l.add(getMonthInGanZhiExact()); l.add(getMonthInGanZhiExact());
l.add(getDayInGanZhi()); l.add(getDayInGanZhiExact());
l.add(timeGan+getTimeZhi()); l.add(getTimeInGanZhi());
return l; return l;
} }

View File

@@ -58,4 +58,12 @@ public class BaZiTest {
System.out.println(lunar.getBaZi()); System.out.println(lunar.getBaZi());
} }
@Test
public void test7(){
Solar solar = new Solar(2020,5,26,23,43,0);
Lunar lunar = solar.getLunar();
//[庚子, 辛巳, 庚午, 丙子]
System.out.println(lunar.getBaZi());
}
} }