This commit is contained in:
Looly 2023-03-23 22:29:39 +08:00
parent ea6eb422b3
commit 4a85b01b38
2 changed files with 42 additions and 8 deletions

View File

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

View File

@ -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));
}
}