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 d10f3cdc0..f2688e439 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 @@ -1883,6 +1883,29 @@ public class DateUtil extends CalendarUtil { return CompareUtil.compare(date1, date2); } + /** + * {@code null}安全的日期比较,并只比较指定格式; {@code null}对象排在末尾, 并指定日期格式; + * + * + * @param date1 日期1 + * @param date2 日期2 + * @param format 日期格式,常用格式见: {@link DatePattern}; 允许为空; date1 date2; eg: yyyy-MM-dd + * @return 比较结果,如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0 + * @since 5.6.4 + * @author dazer + */ + public static int compare(Date date1, Date date2, String format) { + if (format != null) { + if (date1 != null) { + date1 = parse(format(date1, format), format); + } + if (date2 != null) { + date2 = parse(format(date2, format), format); + } + } + return CompareUtil.compare(date1, date2); + } + /** * 纳秒转毫秒 * 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 0e530a269..49a1851a6 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 @@ -698,6 +698,22 @@ public class DateUtilTest { Assert.assertEquals(rangeToList.get(1), DateUtil.parse("2017-01-02")); } + @Test + public void compareTest() { + Date date1 = DateUtil.parse("2021-04-13 23:59:59.999"); + Date date2 = DateUtil.parse("2021-04-13 23:59:10"); + + Assert.assertEquals(1, DateUtil.compare(date1, date2)); + Assert.assertEquals(1, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_PATTERN)); + Assert.assertEquals(0, DateUtil.compare(date1, date2, DatePattern.NORM_DATE_PATTERN)); + Assert.assertEquals(0, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_MINUTE_PATTERN)); + + + Date date11 = DateUtil.parse("2021-04-13 23:59:59.999"); + Date date22 = DateUtil.parse("2021-04-11 23:10:10"); + Assert.assertEquals(0, DateUtil.compare(date11, date22, DatePattern.NORM_MONTH_PATTERN)); + } + @Test public void yearAndQTest() { String yearAndQuarter = DateUtil.yearAndQuarter(DateUtil.parse("2018-12-01"));