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 6c042e540..7ade9f387 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
@@ -358,6 +358,7 @@ public class CalendarUtil {
}
// endregion
+ // region ----- isSame
/**
* 比较两个日期是否为同一天
*
@@ -366,12 +367,7 @@ public class CalendarUtil {
* @return 是否为同一天
*/
public static boolean isSameDay(final Calendar cal1, final Calendar cal2) {
- if (cal1 == null || cal2 == null) {
- throw new IllegalArgumentException("The date must not be null");
- }
- return cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) && //
- cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && //
- cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA);
+ return isSameYear(cal1, cal2) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
}
/**
@@ -409,7 +405,8 @@ public class CalendarUtil {
}
/**
- * 比较两个日期是否为同一月
+ * 比较两个日期是否为同一月
+ * 同一个月的意思是:ERA(公元)、year(年)、month(月)都一致。
*
* @param cal1 日期1
* @param cal2 日期2
@@ -417,11 +414,24 @@ public class CalendarUtil {
* @since 5.4.1
*/
public static boolean isSameMonth(final Calendar cal1, final Calendar cal2) {
+ return isSameYear(cal1, cal2) && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
+ }
+
+ /**
+ * 比较两个日期是否为同一年r>
+ * 同一个月的意思是:ERA(公元)、year(年)都一致。
+ *
+ * @param cal1 日期1
+ * @param cal2 日期2
+ * @return 是否为同一年
+ */
+ public static boolean isSameYear(final Calendar cal1, final Calendar cal2) {
if (cal1 == null || cal2 == null) {
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);
+ // issue#3011@Github
+ cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA);
}
/**
@@ -444,6 +454,7 @@ public class CalendarUtil {
return date1.getTimeInMillis() == date2.getTimeInMillis();
}
+ // endregion
/**
* 获得指定日期年份和季度
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));
+ }
+}