diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ae3607fa..1ac5ef3f3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.16.M1 (2023-03-20) +# 5.8.16.M1 (2023-03-23) ### 🐣新特性 * 【core 】 改进Calculator.conversion,兼容乘法符号省略写法(issue#2964@Github) @@ -17,6 +17,7 @@ * 【core 】 修复FileMagicNumber长度判断问题导致的越界异常(issue#I6MACI@Gitee) * 【core 】 修复DateUtil针对ISO8601时间格式部分场景下的解析存在问题(issue#2981@Github) * 【core 】 修复JSONUtil.toBean可能的空指针问题(issue#2987@Github) +* 【core 】 修复CalendarUtil.isSameMonth没有判断公元前导致不一致的问题(issue#3011@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.15 (2023-03-09) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java index 80ce668d4..4a0f6ae91 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java @@ -395,7 +395,8 @@ public class CalendarUtil { } /** - * 比较两个日期是否为同一月 + * 比较两个日期是否为同一月
+ * 同一个月的意思是:ERA(公元)、year(年)、month(月)都一致。 * * @param cal1 日期1 * @param cal2 日期2 @@ -407,7 +408,9 @@ public class CalendarUtil { throw new IllegalArgumentException("The date must not be null"); } return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && // - cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH); + cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) && + // issue#3011@Github + cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/date/Issue3011Test.java b/hutool-core/src/test/java/cn/hutool/core/date/Issue3011Test.java new file mode 100644 index 000000000..d28f81f76 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/date/Issue3011Test.java @@ -0,0 +1,23 @@ +package cn.hutool.core.date; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Calendar; + +public class Issue3011Test { + @Test + public void isSameMonthTest() { + // https://github.com/dromara/hutool/issues/3011 + // 判断是否同一个月,还需考虑公元前和公元后的的情况 + // 此处公元前2020年和公元2021年返回年都是2021 + final Calendar calendar1 = Calendar.getInstance(); + calendar1.set(-2020, Calendar.FEBRUARY, 12); + + final Calendar calendar2 = Calendar.getInstance(); + calendar2.set(2021, Calendar.FEBRUARY, 12); + + + Assert.assertFalse(DateUtil.isSameMonth(calendar1, calendar2)); + } +}