From ece502c52650e46afdf25cb0a6b9f3a4d47f64d5 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 10 Nov 2022 09:58:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DChineseDate=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=E5=86=9C=E5=8E=86=E6=97=A5=E6=9C=9F=E9=9D=9E=E9=97=B0=E6=9C=88?= =?UTF-8?q?=E6=97=B6=E8=8E=B7=E5=8F=96=E5=85=AC=E5=8E=86=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../src/main/java/cn/hutool/core/date/ChineseDate.java | 7 ++++++- .../java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java | 7 ++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac6d42c46..d84e1eed9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ * 【core 】 修复DefaultTrustManager空指针问题(issue#2716@Github) * 【core 】 修复时间轮添加任务线程安全问题(pr#2712@Github) * 【core 】 修复 BeanUtil#copyProperties 源对象与目标对象都是 Map 时设置忽略属性无效问题(pr#2698@Github) +* 【core 】 修复ChineseDate传入农历日期非闰月时获取公历错误问题(issue#I5YB1A@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.9 (2022-10-22) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/ChineseDate.java b/hutool-core/src/main/java/cn/hutool/core/date/ChineseDate.java index 4fd9a6525..3bdda284d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/ChineseDate.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/ChineseDate.java @@ -80,7 +80,7 @@ public class ChineseDate { year = iYear; // 计算农历月份 - int leapMonth = LunarInfo.leapMonth(iYear); // 闰哪个月,1-12 + final int leapMonth = LunarInfo.leapMonth(iYear); // 闰哪个月,1-12 // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天 int month; int daysOfMonth; @@ -136,6 +136,11 @@ public class ChineseDate { * @since 5.7.18 */ public ChineseDate(int chineseYear, int chineseMonth, int chineseDay, boolean isLeapMonth) { + if(chineseMonth != LunarInfo.leapMonth(chineseYear)){ + // issue#I5YB1A,用户传入的月份可能非闰月,此时此参数无效。 + isLeapMonth = false; + } + this.day = chineseDay; // 当月是闰月的后边的月定义为闰月,如润的是五月,则5表示五月,6表示润五月 this.isLeapMonth = isLeapMonth; diff --git a/hutool-core/src/test/java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java b/hutool-core/src/test/java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java index d0b9a084c..f0831322e 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java @@ -1,13 +1,14 @@ package cn.hutool.core.date.chinese; import cn.hutool.core.date.ChineseDate; -import cn.hutool.core.lang.Console; +import org.junit.Assert; import org.junit.Test; public class IssueI5YB1ATest { @Test - public void chineseDateTest() { + public void chineseDateTest() { + // 四月非闰月,因此isLeapMonth参数无效 final ChineseDate date = new ChineseDate(2023, 4, 8, true); - Console.log(date.getGregorianDate()); + Assert.assertEquals("2023-05-26 00:00:00", date.getGregorianDate().toString()); } }