From 28502528f5247421f1505fee994d27847f76906b Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 26 Nov 2025 17:24:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`DateModifier`=E5=A4=84?= =?UTF-8?q?=E7=90=86AM=E5=92=8CPM=E7=9A=84ceiling=E5=92=8Cround=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=88pr#4161@Github=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/v7/core/date/DateModifier.java | 2 +- .../cn/hutool/v7/core/date/DateUtilTest.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateModifier.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateModifier.java index 412344921..278a7331e 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateModifier.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateModifier.java @@ -89,7 +89,7 @@ public class DateModifier { case ROUND: final int min = isAM ? 0 : 12; final int max = isAM ? 11 : 23; - final int href = (max - min) / 2 + 1; + final int href = min + (max - min) / 2 + 1; final int value = calendar.get(Calendar.HOUR_OF_DAY); calendar.set(Calendar.HOUR_OF_DAY, (value < href) ? min : max); break; diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/date/DateUtilTest.java index 039bc04ab..104799a4a 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/date/DateUtilTest.java @@ -1149,4 +1149,31 @@ public class DateUtilTest { final DateTime dt = DateUtil.parse(dateStr1); assertEquals("2025-07-28 20:00:00", dt.toString()); } + + @Test + public void cellingAmPmTest(){ + final String dateStr2 = "2020-02-29 10:59:34"; + final Date date2 = DateUtil.parse(dateStr2); + + + DateTime dateTime = DateUtil.ceiling(date2, DateField.AM_PM, false); + assertEquals("2020-02-29 11:59:59.999", dateTime.toString(DateFormatPool.NORM_DATETIME_MS_PATTERN)); + + dateTime = DateUtil.ceiling(date2, DateField.AM_PM, true); + assertEquals("2020-02-29 11:59:59.000", dateTime.toString(DateFormatPool.NORM_DATETIME_MS_PATTERN)); + } + + @Test void roundAmPmTest() { + final String dateStr = "2020-02-29 13:59:34"; + final Date date = DateUtil.parse(dateStr); + + final DateTime dateTime = DateUtil.round(date, DateField.AM_PM); + assertEquals("2020-02-29 12:59:59.000", dateTime.toString(DateFormatPool.NORM_DATETIME_MS_PATTERN)); + + final String dateStr2 = "2020-02-29 18:59:34"; + final Date date2 = DateUtil.parse(dateStr2); + + final DateTime dateTime2 = DateUtil.round(date2, DateField.AM_PM); + assertEquals("2020-02-29 23:59:59.000", dateTime2.toString(DateFormatPool.NORM_DATETIME_MS_PATTERN)); + } }