From 538874562d68b3316d7d376ecec20714ced32223 Mon Sep 17 00:00:00 2001 From: naooohu Date: Thu, 20 Jan 2022 01:28:58 +0800 Subject: [PATCH 1/3] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E6=97=A5=E6=9C=9F=E6=98=AF=E5=90=A6=E4=B8=BA?= =?UTF-8?q?=E4=B8=80=E5=91=A8=EF=BC=88=E5=9B=BD=E5=86=85=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=9A=84=E5=BC=80=E5=A7=8B=E4=B8=BA=E5=91=A8=E4=B8=80=EF=BC=8C?= =?UTF-8?q?=E5=9B=BD=E5=A4=96=E4=B8=80=E5=91=A8=E7=9A=84=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E4=B8=BA=E5=91=A8=E6=97=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/date/CalendarUtil.java | 16 +++++++++++ .../java/cn/hutool/core/date/DateUtil.java | 28 +++++++++++++++++++ .../cn/hutool/core/date/DateUtilTest.java | 11 ++++++++ 3 files changed, 55 insertions(+) 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..774aabec5 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,22 @@ public class CalendarUtil { cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA); } + /** + * 比较两个日期是否为同一周 + * + * @param cal1 日期1 + * @param cal2 日期2 + * @return 是否为同一周 + */ + public static boolean isSameWeek(Calendar cal1, 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) && + cal1.get(Calendar.DAY_OF_WEEK) == cal2.get(Calendar.DAY_OF_WEEK); + } + /** * 比较两个日期是否为同一月 * 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..066777c78 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,34 @@ 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"); + } + Calendar calendar1 = calendar(date1); + Calendar calendar2 = calendar(date2); + if (isMon) { + calendar1.setFirstDayOfWeek(Calendar.MONDAY); + calendar1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + calendar2.setFirstDayOfWeek(Calendar.MONDAY); + calendar2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + } else { + calendar1.setFirstDayOfWeek(Calendar.SUNDAY); + calendar1.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + calendar2.setFirstDayOfWeek(Calendar.SUNDAY); + calendar2.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + } + return CalendarUtil.isSameWeek(calendar1, calendar2); + } + /** * 比较两个日期是否为同一月 * 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..ceab8fe7e 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,15 @@ 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 test() { + // 周六与周日比较 + 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); + + } } From 7d4d87be829341c493d33e795bbbe1abda86e775 Mon Sep 17 00:00:00 2001 From: naooohu Date: Thu, 20 Jan 2022 21:12:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E8=B7=A8=E6=9C=88?= =?UTF-8?q?=E6=AF=94=E8=BE=83=E6=98=AF=E5=90=A6=E5=9C=A8=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/date/CalendarUtil.java | 4 +--- .../src/test/java/cn/hutool/core/date/DateUtilTest.java | 6 ++++-- 2 files changed, 5 insertions(+), 5 deletions(-) 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 774aabec5..4c6d3093c 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 @@ -359,9 +359,7 @@ public class CalendarUtil { 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) && - cal1.get(Calendar.DAY_OF_WEEK) == cal2.get(Calendar.DAY_OF_WEEK); + return isSameDay(cal1, cal2); } /** 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 ceab8fe7e..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 @@ -1006,13 +1006,15 @@ public class DateUtilTest { } @Test - public void 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); } } From 3b6cca7435a4256e57406dc70ed7e31d63948223 Mon Sep 17 00:00:00 2001 From: naooohu Date: Fri, 21 Jan 2022 00:55:34 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=20=E6=8A=8A=E6=97=A5=E6=9C=9F=E4=B8=BA?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=BD=93=E5=89=8D=E5=91=A8=E7=9A=84?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=A4=A9=E4=BB=A3=E7=A0=81=E5=9D=97=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E5=88=B0=20CalendarUtil=20=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/date/CalendarUtil.java | 16 +++++++++++++++- .../main/java/cn/hutool/core/date/DateUtil.java | 15 +-------------- 2 files changed, 16 insertions(+), 15 deletions(-) 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 4c6d3093c..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 @@ -353,12 +353,26 @@ public class CalendarUtil { * * @param cal1 日期1 * @param cal2 日期2 + * @param isMon 是否为周一。国内第一天为星期一,国外第一天为星期日 * @return 是否为同一周 */ - public static boolean isSameWeek(Calendar cal1, Calendar cal2) { + 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 066777c78..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 @@ -1598,20 +1598,7 @@ public class DateUtil extends CalendarUtil { if (date1 == null || date2 == null) { throw new IllegalArgumentException("The date must not be null"); } - Calendar calendar1 = calendar(date1); - Calendar calendar2 = calendar(date2); - if (isMon) { - calendar1.setFirstDayOfWeek(Calendar.MONDAY); - calendar1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); - calendar2.setFirstDayOfWeek(Calendar.MONDAY); - calendar2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); - } else { - calendar1.setFirstDayOfWeek(Calendar.SUNDAY); - calendar1.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); - calendar2.setFirstDayOfWeek(Calendar.SUNDAY); - calendar2.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); - } - return CalendarUtil.isSameWeek(calendar1, calendar2); + return CalendarUtil.isSameWeek(calendar(date1), calendar(date2), isMon); } /**