From 26944295498daf78db8de57fcb96dd627f3fd277 Mon Sep 17 00:00:00 2001
From: 6tail <6tail@6tail.cn>
Date: Fri, 17 Sep 2021 22:09:07 +0800
Subject: [PATCH] =?UTF-8?q?v1.2.5=20=E4=BF=AE=E5=A4=8D=E5=85=AC=E5=85=830?=
=?UTF-8?q?=E8=87=B34=E5=B9=B4=E8=BD=AC=E9=98=B4=E5=8E=86=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
README_EN.md | 2 +-
pom.xml | 2 +-
src/main/java/com/nlf/calendar/Lunar.java | 14 ++++++-
src/main/java/com/nlf/calendar/LunarYear.java | 13 ++++--
src/test/java/test/BaZiTest.java | 18 ++++++++
src/test/java/test/LunarTest.java | 42 +++++++++++++++++++
7 files changed, 86 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 290b34b..e610d58 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ lunar是一款无第三方依赖的公历(阳历)和农历(阴历、老黄历)
cn.6tail
lunar
- 1.2.4
+ 1.2.5
```
diff --git a/README_EN.md b/README_EN.md
index ccf5b27..0b04fbb 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -12,7 +12,7 @@ lunar is a calendar library for Solar and Chinese Lunar.
cn.6tail
lunar
- 1.2.4
+ 1.2.5
```
diff --git a/pom.xml b/pom.xml
index b995315..7e61add 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
cn.6tail
lunar
jar
- 1.2.4
+ 1.2.5
${project.groupId}:${project.artifactId}
https://github.com/6tail/lunar-java
a calendar library for Solar and Chinese Lunar
diff --git a/src/main/java/com/nlf/calendar/Lunar.java b/src/main/java/com/nlf/calendar/Lunar.java
index 4cc991c..9e3b106 100644
--- a/src/main/java/com/nlf/calendar/Lunar.java
+++ b/src/main/java/com/nlf/calendar/Lunar.java
@@ -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;
}
diff --git a/src/main/java/com/nlf/calendar/LunarYear.java b/src/main/java/com/nlf/calendar/LunarYear.java
index 8c39d03..33a541d 100644
--- a/src/main/java/com/nlf/calendar/LunarYear.java
+++ b/src/main/java/com/nlf/calendar/LunarYear.java
@@ -25,6 +25,8 @@ public class LunarYear {
private static final Map LEAP = new HashMap();
+ private static final Map CACHE = new HashMap();
+
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);
}
}
diff --git a/src/test/java/test/BaZiTest.java b/src/test/java/test/BaZiTest.java
index d38dba9..56dabe3 100644
--- a/src/test/java/test/BaZiTest.java
+++ b/src/test/java/test/BaZiTest.java
@@ -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());
+ }
+
}
diff --git a/src/test/java/test/LunarTest.java b/src/test/java/test/LunarTest.java
index 9781672..0a51c7d 100644
--- a/src/test/java/test/LunarTest.java
+++ b/src/test/java/test/LunarTest.java
@@ -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());
+ }
+
}