From 8d282f8a7cf924bf6f519b5db703cb6cc1eeeeb4 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Wed, 22 Jul 2020 16:04:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=AB=E5=AD=97=E8=BD=AC?= =?UTF-8?q?=E9=98=B3=E5=8E=86=EF=BC=9B=E6=96=B0=E5=A2=9E=E4=B8=AD=E5=9B=BD?= =?UTF-8?q?=E4=BA=BA=E6=B0=91=E8=AD=A6=E5=AF=9F=E8=8A=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nlf/calendar/Solar.java | 72 +++++++++++++++++++ .../java/com/nlf/calendar/util/SolarUtil.java | 2 +- src/test/java/sample/BaZiTest.java | 30 +++++++- 3 files changed, 102 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/nlf/calendar/Solar.java b/src/main/java/com/nlf/calendar/Solar.java index 4dffeee..ddecb54 100644 --- a/src/main/java/com/nlf/calendar/Solar.java +++ b/src/main/java/com/nlf/calendar/Solar.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; + +import com.nlf.calendar.util.LunarUtil; import com.nlf.calendar.util.SolarUtil; /** @@ -204,6 +206,76 @@ public class Solar{ return new Solar(year,month,day,hour,minute,second); } + /** + * 通过八字获取阳历列表 + * @param yearGanZhi 年柱 + * @param monthGanZhi 月柱 + * @param dayGanZhi 日柱 + * @param timeGanZhi 时柱 + * @return 符合的阳历列表 + */ + public static List fromBaZi(String yearGanZhi,String monthGanZhi,String dayGanZhi,String timeGanZhi){ + List l = new ArrayList(); + Solar today = new Solar(); + Lunar lunar = today.getLunar(); + int offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact())-LunarUtil.getJiaZiIndex(yearGanZhi); + if (offsetYear<0){ + offsetYear = offsetYear+60; + } + int startYear = today.getYear() - offsetYear; + int hour = 0; + String timeZhi = timeGanZhi.substring(1); + for(int i=0,j=LunarUtil.ZHI.length;i=SolarUtil.BASE_YEAR) { + int counter = 0; + int month = 12; + int day; + boolean found = false; + while (counter < 15) { + day = 1; + if(year==SolarUtil.BASE_YEAR){ + if(month 12) { + month = 1; + year++; + } + counter++; + } + if (found) { + counter = 0; + Solar solar = new Solar(year, month-1, 1, hour, 0, 0); + while (counter < 61) { + lunar = solar.getLunar(); + if (lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi) && lunar.getDayInGanZhiExact().equals(dayGanZhi) && lunar.getTimeInGanZhi().equals(timeGanZhi)) { + l.add(solar); + break; + } + solar = solar.next(1); + counter++; + } + } + year -= 61; + } + return l; + } + /** * 是否闰年 * diff --git a/src/main/java/com/nlf/calendar/util/SolarUtil.java b/src/main/java/com/nlf/calendar/util/SolarUtil.java index b42394b..73bbaaa 100644 --- a/src/main/java/com/nlf/calendar/util/SolarUtil.java +++ b/src/main/java/com/nlf/calendar/util/SolarUtil.java @@ -55,7 +55,7 @@ public class SolarUtil{ private static final long serialVersionUID = -1; { put("1-8",Collections.nCopies(1,"周恩来逝世纪念日")); - put("1-10",Collections.nCopies(1,"中国公安110宣传日")); + put("1-10",Arrays.asList("中国人民警察节","中国公安110宣传日")); put("1-21",Collections.nCopies(1,"列宁逝世纪念日")); put("1-26",Collections.nCopies(1,"国际海关日")); put("2-2",Collections.nCopies(1,"世界湿地日")); diff --git a/src/test/java/sample/BaZiTest.java b/src/test/java/sample/BaZiTest.java index 61bb0ed..866380f 100644 --- a/src/test/java/sample/BaZiTest.java +++ b/src/test/java/sample/BaZiTest.java @@ -2,9 +2,10 @@ package sample; import com.nlf.calendar.Lunar; import com.nlf.calendar.Solar; -import org.junit.Assert; import org.junit.Test; +import java.util.List; + /** * 八字测试 */ @@ -58,6 +59,15 @@ public class BaZiTest { System.out.println(lunar.getBaZi()); } + @Test + public void testBazi2Solar6() { + List l = Solar.fromBaZi("庚子", "戊寅", "戊寅", "癸亥"); + // [2020-02-05 22:00:00, 1960-02-20 22:00:00] + for (Solar solar : l) { + System.out.println(solar.toFullString()); + } + } + @Test public void test7(){ Solar solar = new Solar(2020,5,26,23,43,0); @@ -66,4 +76,22 @@ public class BaZiTest { System.out.println(lunar.getBaZi()); } + @Test + public void testBazi2Solar7() { + List l = Solar.fromBaZi("庚子", "辛巳", "庚午", "丙子"); + // [2020-07-21 22:00:00, 1960-08-05 22:00:00] + for (Solar solar : l) { + System.out.println(solar.toFullString()); + } + } + + @Test + public void testBazi2Solar() { + List l = Solar.fromBaZi("庚子", "癸未", "乙丑", "丁亥"); + // [2020-05-26 23:00:00, 2020-05-27 00:00:00] + for (Solar solar : l) { + System.out.println(solar.toFullString()); + } + } + }