From fc5e1ecff9e8d92a37eb2a613dcb040a00fcd98c Mon Sep 17 00:00:00 2001 From: asukavuuyn <1346007099@qq.com> Date: Wed, 26 Nov 2025 15:19:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:12=E5=B0=8F=E6=97=B6=E5=88=B6ceiling?= =?UTF-8?q?=E5=92=8Cround=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/date/DateModifier.java | 4 +-- .../cn/hutool/core/date/DateUtilTest.java | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateModifier.java b/hutool-core/src/main/java/cn/hutool/core/date/DateModifier.java index 0fa96638d..69a4cb8ca 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateModifier.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateModifier.java @@ -73,13 +73,13 @@ public class DateModifier { case ROUND: int min = isAM ? 0 : 12; int max = isAM ? 11 : 23; - int href = (max - min) / 2 + 1; + int href = min + (max - min) / 2 + 1; int value = calendar.get(Calendar.HOUR_OF_DAY); calendar.set(Calendar.HOUR_OF_DAY, (value < href) ? min : max); break; } // 处理下一级别字段 - return modify(calendar, dateField + 1, modifyType); + return modify(calendar, dateField + 1, modifyType, truncateMillisecond); } final int endField = truncateMillisecond ? Calendar.SECOND : Calendar.MILLISECOND; 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 64922020b..c6d5c92a4 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -130,6 +130,33 @@ public class DateUtilTest { assertEquals("2020-02-29 12:59:59.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); } + @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); + assertEquals("2020-02-29 11:59:59.999", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + + dateTime = DateUtil.ceiling(date2, DateField.AM_PM, true); + assertEquals("2020-02-29 11:59:59.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + } + + @Test void roundAmPmTest() { + final String dateStr = "2020-02-29 13:59:34"; + final Date date = DateUtil.parse(dateStr); + + DateTime dateTime = DateUtil.round(date, DateField.AM_PM); + assertEquals("2020-02-29 12:59:59.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + + final String dateStr2 = "2020-02-29 18:59:34"; + final Date date2 = DateUtil.parse(dateStr2); + + DateTime dateTime2 = DateUtil.round(date2, DateField.AM_PM); + assertEquals("2020-02-29 23:59:59.000", dateTime2.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); + } + @Test public void ceilingDayTest() { final String dateStr2 = "2020-02-29 12:59:34";