From c7738352ebd0202dd3d3ad787769ee10b45d1235 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Mon, 12 Oct 2020 22:36:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=8A=82=E6=B0=94=E5=90=8D=E3=80=81=E4=B8=8A=E4=B8=80=E6=B0=94?= =?UTF-8?q?=E4=BB=A4=E3=80=81=E4=B8=8B=E4=B8=80=E6=B0=94=E4=BB=A4=E3=80=81?= =?UTF-8?q?=E5=BD=93=E5=A4=A9=E8=8A=82=E6=B0=94=E3=80=81=E5=BD=93=E5=A4=A9?= =?UTF-8?q?=E8=8A=82=E4=BB=A4=E3=80=81=E5=BD=93=E5=A4=A9=E6=B0=94=E4=BB=A4?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nlf/calendar/Lunar.java | 66 ++++++++++++++++++++++- src/test/java/test/JieQiTest.java | 60 +++++++++++++++++++++ 2 files changed, 125 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/nlf/calendar/Lunar.java b/src/main/java/com/nlf/calendar/Lunar.java index 1fb71e1..177808d 100644 --- a/src/main/java/com/nlf/calendar/Lunar.java +++ b/src/main/java/com/nlf/calendar/Lunar.java @@ -1949,6 +1949,22 @@ public class Lunar{ return getNearJieQi(false,LunarUtil.JIE); } + /** + * 获取下一气令(顺推的第一个气令) + * @return 节气 + */ + public JieQi getNextQi(){ + return getNearJieQi(true,LunarUtil.QI); + } + + /** + * 获取上一气令(逆推的第一个气令) + * @return 节气 + */ + public JieQi getPrevQi(){ + return getNearJieQi(false,LunarUtil.QI); + } + /** * 获取下一节气(顺推的第一个节气) * @return 节气 @@ -2019,6 +2035,54 @@ public class Lunar{ return new JieQi(name, near); } + /** + * 获取节气名称,如果无节气,返回空字符串 + * @return 节气名称 + */ + public String getJieQi(){ + String name = ""; + for(Map.Entry jq:jieQi.entrySet()){ + Solar d = jq.getValue(); + if(d.getYear()==solar.getYear()&&d.getMonth()==solar.getMonth()&&d.getDay()==solar.getDay()){ + name = jq.getKey(); + break; + } + } + if(JIE_QI_APPEND.equals(name)){ + name = JIE_QI_FIRST; + }else if(JIE_QI_PREPEND.equals(name)){ + name = JIE_QI_LAST; + } + return name; + } + + /** + * 获取当天节气对象,如果无节气,返回null + * @return 节气对象 + */ + public JieQi getCurrentJieQi(){ + String name = getJieQi(); + return name.length()>0 ? new JieQi(name,solar) : null; + } + + /** + * 获取当天节令对象,如果无节令,返回null + * @return 节气对象 + */ + public JieQi getCurrentJie(){ + String name = getJie(); + return name.length()>0 ? new JieQi(name,solar) : null; + } + + /** + * 获取当天气令对象,如果无气令,返回null + * @return 节气对象 + */ + public JieQi getCurrentQi(){ + String name = getQi(); + return name.length()>0 ? new JieQi(name,solar) : null; + } + public String toFullString(){ StringBuilder s = new StringBuilder(); s.append(toString()); @@ -2058,7 +2122,7 @@ public class Lunar{ s.append(f); s.append(")"); } - String jq = getJie()+getQi(); + String jq = getJieQi(); if(jq.length()>0){ s.append(" ["); s.append(jq); diff --git a/src/test/java/test/JieQiTest.java b/src/test/java/test/JieQiTest.java index 9b9a5d8..0638dc2 100644 --- a/src/test/java/test/JieQiTest.java +++ b/src/test/java/test/JieQiTest.java @@ -1,5 +1,6 @@ package test; +import com.nlf.calendar.Lunar; import com.nlf.calendar.Solar; import org.junit.Assert; import org.junit.Test; @@ -95,4 +96,63 @@ public class JieQiTest { Assert.assertEquals(name, entry.getValue(), result.get(name).toYmdHms()); } } + + @Test + public void test() { + Solar solar = Solar.fromYmd(1986,1,5); + Lunar lunar = solar.getLunar(); + Assert.assertEquals("小寒", lunar.getJie()); + Assert.assertEquals("小寒", lunar.getJieQi()); + Assert.assertEquals("小寒", lunar.getCurrentJieQi().getName()); + Assert.assertEquals("小寒", lunar.getCurrentJie().getName()); + Assert.assertNull(lunar.getCurrentQi()); + Assert.assertEquals("", lunar.getQi()); + Assert.assertEquals("大雪", lunar.getPrevJie().getName()); + Assert.assertEquals("冬至", lunar.getPrevQi().getName()); + Assert.assertEquals("冬至", lunar.getPrevJieQi().getName()); + + solar = Solar.fromYmdHms(1986,1,20,17,0,0); + lunar = solar.getLunar(); + Assert.assertEquals("大寒", lunar.getQi()); + Assert.assertEquals("大寒", lunar.getJieQi()); + Assert.assertEquals("大寒", lunar.getCurrentJieQi().getName()); + Assert.assertEquals("大寒", lunar.getCurrentQi().getName()); + Assert.assertNull(lunar.getCurrentJie()); + Assert.assertEquals("", lunar.getJie()); + Assert.assertEquals("立春", lunar.getNextJie().getName()); + Assert.assertEquals("雨水", lunar.getNextQi().getName()); + Assert.assertEquals("立春", lunar.getNextJieQi().getName()); + solar = Solar.fromYmdHms(1986,1,20,14,0,0); + lunar = solar.getLunar(); + Assert.assertEquals("小寒", lunar.getPrevJie().getName()); + Assert.assertEquals("冬至", lunar.getPrevQi().getName()); + Assert.assertEquals("小寒", lunar.getPrevJieQi().getName()); + + solar = Solar.fromYmd(1986,12,7); + lunar = solar.getLunar(); + Assert.assertEquals("大雪", lunar.getJie()); + Assert.assertEquals("大雪", lunar.getJieQi()); + Assert.assertEquals("大雪", lunar.getCurrentJieQi().getName()); + Assert.assertEquals("大雪", lunar.getCurrentJie().getName()); + Assert.assertNull(lunar.getCurrentQi()); + Assert.assertEquals("", lunar.getQi()); + Assert.assertEquals("大雪", lunar.getNextJie().getName()); + Assert.assertEquals("冬至", lunar.getNextQi().getName()); + Assert.assertEquals("大雪", lunar.getNextJieQi().getName()); + + solar = Solar.fromYmd(1986,1,1); + lunar = solar.getLunar(); + Assert.assertEquals("", lunar.getJie()); + Assert.assertEquals("", lunar.getQi()); + Assert.assertEquals("", lunar.getJieQi()); + Assert.assertNull(lunar.getCurrentJieQi()); + Assert.assertNull(lunar.getCurrentJie()); + Assert.assertNull(lunar.getCurrentQi()); + Assert.assertEquals("大雪", lunar.getPrevJie().getName()); + Assert.assertEquals("冬至", lunar.getPrevQi().getName()); + Assert.assertEquals("冬至", lunar.getPrevJieQi().getName()); + Assert.assertEquals("小寒", lunar.getNextJie().getName()); + Assert.assertEquals("大寒", lunar.getNextQi().getName()); + Assert.assertEquals("小寒", lunar.getNextJieQi().getName()); + } } From 913e7b40fb46d194661d3ab055c5eeb863391253 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Mon, 12 Oct 2020 22:54:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=8A=82=E6=B0=94=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=E6=98=AF=E8=8A=82=E4=BB=A4?= =?UTF-8?q?=E8=BF=98=E6=98=AF=E6=B0=94=E4=BB=A4=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nlf/calendar/JieQi.java | 47 ++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/nlf/calendar/JieQi.java b/src/main/java/com/nlf/calendar/JieQi.java index 65a0597..6cdf424 100644 --- a/src/main/java/com/nlf/calendar/JieQi.java +++ b/src/main/java/com/nlf/calendar/JieQi.java @@ -1,5 +1,7 @@ package com.nlf.calendar; +import com.nlf.calendar.util.LunarUtil; + /** * 节气 * @@ -13,11 +15,22 @@ public class JieQi { /** 阳历日期 */ private Solar solar; + /** 是否节令 */ + private boolean jie; + + /** 是否气令 */ + private boolean qi; + public JieQi() { } + /** + * 初始化 + * @param name 名称 + * @param solar 阳历日期 + */ public JieQi(String name, Solar solar) { - this.name = name; + setName(name); this.solar = solar; } @@ -35,6 +48,18 @@ public class JieQi { */ public void setName(String name) { this.name = name; + for(String key: LunarUtil.JIE){ + if(key.equals(name)){ + this.jie = true; + return; + } + } + for(String key: LunarUtil.QI){ + if(key.equals(name)){ + this.qi = true; + return; + } + } } /** @@ -53,4 +78,24 @@ public class JieQi { this.solar = solar; } + /** + * 是否节令 + * @return true/false + */ + public boolean isJie(){ + return jie; + } + + /** + * 是否气令 + * @return true/false + */ + public boolean isQi() { + return qi; + } + + @Override + public String toString(){ + return name; + } }