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