From ecb1fc5fb8c0c42894f803c4edadf7e900117080 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Wed, 22 Jul 2020 23:25:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E8=87=B4=E6=AD=BB?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=85=AB=E5=AD=97=E8=BD=AC=E9=98=B3=E5=8E=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91=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 | 43 +++++++++++-------- .../java/com/nlf/calendar/util/LunarUtil.java | 10 +++-- src/test/java/sample/BaZiTest.java | 13 +++++- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/nlf/calendar/Solar.java b/src/main/java/com/nlf/calendar/Solar.java index ddecb54..da65889 100644 --- a/src/main/java/com/nlf/calendar/Solar.java +++ b/src/main/java/com/nlf/calendar/Solar.java @@ -219,7 +219,7 @@ public class Solar{ Solar today = new Solar(); Lunar lunar = today.getLunar(); int offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact())-LunarUtil.getJiaZiIndex(yearGanZhi); - if (offsetYear<0){ + if(offsetYear<0){ offsetYear = offsetYear+60; } int startYear = today.getYear() - offsetYear; @@ -230,37 +230,44 @@ public class Solar{ hour = (i-1)*2; } } - int year = startYear-1; - while(year>=SolarUtil.BASE_YEAR) { + while(startYear>=SolarUtil.BASE_YEAR-1){ + int year = startYear-1; int counter = 0; int month = 12; int day; boolean found = false; while (counter < 15) { - day = 1; - if(year==SolarUtil.BASE_YEAR){ - if(month=SolarUtil.BASE_YEAR){ + day = 1; + if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){ day = SolarUtil.BASE_DAY; } - } - Solar solar = new Solar(year, month, day, hour, 0, 0); - lunar = solar.getLunar(); - if (lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi)) { - found = true; - break; + Solar solar = new Solar(year, month, day, hour, 0, 0); + lunar = solar.getLunar(); + if(lunar.getYearInGanZhiExact().equals(yearGanZhi) && lunar.getMonthInGanZhiExact().equals(monthGanZhi)){ + found = true; + break; + } } month++; - if (month > 12) { + if(month > 12){ month = 1; year++; } counter++; } - if (found) { + if(found){ counter = 0; - Solar solar = new Solar(year, month-1, 1, hour, 0, 0); + month--; + if(month<1){ + month = 12; + year--; + } + day = 1; + if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){ + day = SolarUtil.BASE_DAY; + } + Solar solar = new Solar(year, month, day, 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)) { @@ -271,7 +278,7 @@ public class Solar{ counter++; } } - year -= 61; + startYear -= 60; } return l; } diff --git a/src/main/java/com/nlf/calendar/util/LunarUtil.java b/src/main/java/com/nlf/calendar/util/LunarUtil.java index 61be3de..76bdecc 100644 --- a/src/main/java/com/nlf/calendar/util/LunarUtil.java +++ b/src/main/java/com/nlf/calendar/util/LunarUtil.java @@ -1101,19 +1101,21 @@ public class LunarUtil{ * @return 距离天数 */ public static int computeAddDays(int year,int month,int day){ + if(BASE_YEAR==year&&BASE_MONTH==month){ + return day-BASE_DAY; + } int y = BASE_YEAR; int m = BASE_MONTH; int diff = getDaysOfMonth(y,m)-BASE_DAY; - m = nextMonth(y,m); - while(true){ - diff += getDaysOfMonth(y,m); + while(y!=year||m!=month){ m = nextMonth(y,m); if(m==1){ y++; } if(y==year&&m==month){ diff += day; - break; + }else { + diff += getDaysOfMonth(y, m); } } return diff; diff --git a/src/test/java/sample/BaZiTest.java b/src/test/java/sample/BaZiTest.java index 866380f..f649ba8 100644 --- a/src/test/java/sample/BaZiTest.java +++ b/src/test/java/sample/BaZiTest.java @@ -79,7 +79,7 @@ public class BaZiTest { @Test public void testBazi2Solar7() { List l = Solar.fromBaZi("庚子", "辛巳", "庚午", "丙子"); - // [2020-07-21 22:00:00, 1960-08-05 22:00:00] + // [2020-05-26 23:00:00, 2020-05-27 00:00:00] for (Solar solar : l) { System.out.println(solar.toFullString()); } @@ -88,7 +88,16 @@ public class BaZiTest { @Test public void testBazi2Solar() { List l = Solar.fromBaZi("庚子", "癸未", "乙丑", "丁亥"); - // [2020-05-26 23:00:00, 2020-05-27 00:00:00] + // [2020-07-21 22:00:00, 1960-08-05 22:00:00] + for (Solar solar : l) { + System.out.println(solar.toFullString()); + } + } + + @Test + public void testBazi2Solar2() { + List l = Solar.fromBaZi("庚子", "戊子", "己卯", "庚午"); + // [1960-12-17 12:00:00, 1901-01-01 12:00:00] for (Solar solar : l) { System.out.println(solar.toFullString()); }