v1.2.5 修复公元0至4年转阴历错误的问题。
This commit is contained in:
@@ -22,7 +22,7 @@ public class Lunar {
|
||||
/**
|
||||
* 实际的节气表
|
||||
*/
|
||||
public static final String[] JIE_QI_IN_USE = {"DA_XUE", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "DONG_ZHI", "XIAO_HAN", "DA_HAN", "LI_CHUN"};
|
||||
public static final String[] JIE_QI_IN_USE = {"DA_XUE", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "DONG_ZHI", "XIAO_HAN", "DA_HAN", "LI_CHUN", "YU_SHUI", "JING_ZHE"};
|
||||
|
||||
/**
|
||||
* 农历年
|
||||
@@ -242,6 +242,14 @@ public class Lunar {
|
||||
yearGanIndex = offset % 10;
|
||||
yearZhiIndex = offset % 12;
|
||||
|
||||
if (yearGanIndex < 0) {
|
||||
yearGanIndex += 10;
|
||||
}
|
||||
|
||||
if (yearZhiIndex < 0) {
|
||||
yearZhiIndex += 12;
|
||||
}
|
||||
|
||||
//以立春作为新一年的开始的干支纪年
|
||||
int g = yearGanIndex;
|
||||
int z = yearZhiIndex;
|
||||
@@ -819,6 +827,10 @@ public class Lunar {
|
||||
jq = "立春";
|
||||
}else if("DA_XUE".equals(jq)){
|
||||
jq = "大雪";
|
||||
} else if ("YU_SHUI".equals(jq)) {
|
||||
jq = "雨水";
|
||||
} else if ("JING_ZHE".equals(jq)) {
|
||||
jq = "惊蛰";
|
||||
}
|
||||
return jq;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ public class LunarYear {
|
||||
|
||||
private static final Map<Integer, Integer> LEAP = new HashMap<Integer, Integer>();
|
||||
|
||||
private static final Map<Integer, LunarYear> CACHE = new HashMap<Integer, LunarYear>();
|
||||
|
||||
static {
|
||||
for (int y : LEAP_11) {
|
||||
LEAP.put(y, 13);
|
||||
@@ -66,12 +68,17 @@ public class LunarYear {
|
||||
* @return 农历年
|
||||
*/
|
||||
public static LunarYear fromYear(int lunarYear) {
|
||||
return new LunarYear(lunarYear);
|
||||
LunarYear obj = CACHE.get(lunarYear);
|
||||
if (null == obj) {
|
||||
obj = new LunarYear(lunarYear);
|
||||
CACHE.put(lunarYear, obj);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
private void compute() {
|
||||
// 节气(中午12点)
|
||||
double[] jq = new double[25];
|
||||
double[] jq = new double[27];
|
||||
// 合朔,即每月初一(中午12点)
|
||||
double[] hs = new double[16];
|
||||
// 每月天数
|
||||
@@ -87,7 +94,7 @@ public class LunarYear {
|
||||
t += ShouXingUtil.ONE_THIRD - ShouXingUtil.dtT(t);
|
||||
jieQiJulianDays.add(t + Solar.J2000);
|
||||
// 按中午12点算的节气
|
||||
if (i > 0 && i < 26) {
|
||||
if (i > 0 && i < 28) {
|
||||
jq[i - 1] = Math.round(t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,4 +240,22 @@ public class BaZiTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test4() {
|
||||
Lunar lunar = Lunar.fromYmd(1985, 12, 27);
|
||||
Assert.assertEquals("1995-11-05", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test5() {
|
||||
Lunar lunar = Lunar.fromYmd(1985, 1, 27);
|
||||
Assert.assertEquals("1989-03-28", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test6() {
|
||||
Lunar lunar = Lunar.fromYmd(1986, 12, 27);
|
||||
Assert.assertEquals("1990-04-15", lunar.getEightChar().getYun(1).getStartSolar().toYmd());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -289,4 +289,46 @@ public class LunarTest {
|
||||
Assert.assertEquals("7013-12-24", solar.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test39() {
|
||||
Solar solar = Solar.fromYmd(1987, 4, 12);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("一九八七年三月十五", lunar.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test40() {
|
||||
Solar solar = Solar.fromYmd(1987, 4, 13);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("一九八七年三月十六", lunar.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test41() {
|
||||
Solar solar = Solar.fromYmd(4, 2, 10);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("鼠", lunar.getYearShengXiao());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test42() {
|
||||
Solar solar = Solar.fromYmd(4, 2, 9);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("猪", lunar.getYearShengXiao());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test43() {
|
||||
Solar solar = Solar.fromYmd(1, 2, 12);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("鸡", lunar.getYearShengXiao());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test44() {
|
||||
Solar solar = Solar.fromYmd(1, 1, 1);
|
||||
Lunar lunar = solar.getLunar();
|
||||
Assert.assertEquals("猴", lunar.getYearShengXiao());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user