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 a1e2f176b..be7e6a41d 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 @@ -348,6 +348,34 @@ public class CalendarUtil { cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA); } + /** + * 比较两个日期是否为同一周 + * + * @param cal1 日期1 + * @param cal2 日期2 + * @param isMon 是否为周一。国内第一天为星期一,国外第一天为星期日 + * @return 是否为同一周 + */ + public static boolean isSameWeek(Calendar cal1, Calendar cal2, boolean isMon) { + if (cal1 == null || cal2 == null) { + throw new IllegalArgumentException("The date must not be null"); + } + // 把所传日期设置为其当前周的第一天 + // 比较设置后的两个日期是否是同一天:true 代表同一周 + if (isMon) { + cal1.setFirstDayOfWeek(Calendar.MONDAY); + cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + cal2.setFirstDayOfWeek(Calendar.MONDAY); + cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + } else { + cal1.setFirstDayOfWeek(Calendar.SUNDAY); + cal1.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + cal2.setFirstDayOfWeek(Calendar.SUNDAY); + cal2.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + } + return isSameDay(cal1, cal2); + } + /** * 比较两个日期是否为同一月 * diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index 813fba971..c887ef349 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -1586,6 +1586,21 @@ public class DateUtil extends CalendarUtil { return CalendarUtil.isSameDay(calendar(date1), calendar(date2)); } + /** + * 比较两个日期是否为同一周 + * + * @param date1 日期1 + * @param date2 日期2 + * @param isMon 是否为周一。国内第一天为星期一,国外第一天为星期日 + * @return 是否为同一周 + */ + public static boolean isSameWeek(final Date date1, final Date date2, boolean isMon) { + if (date1 == null || date2 == null) { + throw new IllegalArgumentException("The date must not be null"); + } + return CalendarUtil.isSameWeek(calendar(date1), calendar(date2), isMon); + } + /** * 比较两个日期是否为同一月 * diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index 24e7321a8..0aea526a6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1004,4 +1004,17 @@ public class DateUtilTest { final DateTime parse = DateUtil.parse("2021-12-01", DatePattern.NORM_DATE_FORMATTER); Assert.assertEquals("2021-12-01 00:00:00", parse.toString()); } + + @Test + public void isSameWeektest() { + // 周六与周日比较 + final boolean isSameWeek = DateUtil.isSameWeek(DateTime.of("2022-01-01", "yyyy-MM-dd"), DateTime.of("2022-01-02", "yyyy-MM-dd"), true); + Assert.assertTrue(isSameWeek); + // 周日与周一比较 + final boolean isSameWeek1 = DateUtil.isSameWeek(DateTime.of("2022-01-02", "yyyy-MM-dd"), DateTime.of("2022-01-03", "yyyy-MM-dd"), false); + Assert.assertTrue(isSameWeek1); + // 跨月比较 + final boolean isSameWeek2 = DateUtil.isSameWeek(DateTime.of("2021-12-29", "yyyy-MM-dd"), DateTime.of("2022-01-01", "yyyy-MM-dd"), true); + Assert.assertTrue(isSameWeek2); + } }