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
// 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 {
}
/**
* 比较两个日期是否为同一月
* 比较两个日期是否为同一月<br>
* 同一个月的意思是ERA公元yearmonth都一致
*
* @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
/**
* 获得指定日期年份和季度<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));
}
}