From a0714907e895c74c66423f4fb74f6794cfe50f92 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Fri, 24 Apr 2020 00:05:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=98=B4=E5=8E=86=E6=9C=88?= =?UTF-8?q?=E5=92=8C=E6=97=A5=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nlf/calendar/Lunar.java | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/nlf/calendar/Lunar.java b/src/main/java/com/nlf/calendar/Lunar.java index 5bd1015..3bc3574 100644 --- a/src/main/java/com/nlf/calendar/Lunar.java +++ b/src/main/java/com/nlf/calendar/Lunar.java @@ -104,7 +104,7 @@ public class Lunar{ * * @param lunarYear 年(农历) * @param lunarMonth 月(农历),1到12,闰月为负,即闰2月=-2 - * @param lunarDay 日(农历),1到31 + * @param lunarDay 日(农历),1到30 */ public Lunar(int lunarYear,int lunarMonth,int lunarDay){ this(lunarYear,lunarMonth,lunarDay,0,0,0); @@ -115,12 +115,31 @@ public class Lunar{ * * @param lunarYear 年(农历) * @param lunarMonth 月(农历),1到12,闰月为负,即闰2月=-2 - * @param lunarDay 日(农历),1到31 + * @param lunarDay 日(农历),1到30 * @param hour 小时(阳历) * @param minute 分钟(阳历) * @param second 秒钟(阳历) */ public Lunar(int lunarYear,int lunarMonth,int lunarDay,int hour,int minute,int second){ + int m = Math.abs(lunarMonth); + if(m<1||m>12){ + throw new IllegalArgumentException("lunar month must between 1 and 12, or negative"); + } + if(lunarMonth<0){ + int leapMonth = LunarUtil.getLeapMonth(lunarYear); + if(leapMonth==0){ + throw new IllegalArgumentException(String.format("no leap month in lunar year %d",lunarYear)); + }else if(leapMonth!=m){ + throw new IllegalArgumentException(String.format("leap month is %d in lunar year %d",leapMonth,lunarYear)); + } + } + if(lunarDay<1||lunarDay>30){ + throw new IllegalArgumentException("lunar day must between 1 and 30"); + } + int days = LunarUtil.getDaysOfMonth(lunarYear,lunarMonth); + if(lunarDay>days){ + throw new IllegalArgumentException(String.format("only %d days in lunar year %d month %d",days,lunarYear,lunarMonth)); + } this.year = lunarYear; this.month = lunarMonth; this.day = lunarDay;