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()); + } + }