修复DateModifier处理AM和PM的ceiling和round问题(pr#4161@Github)

This commit is contained in:
Looly 2025-11-26 17:24:22 +08:00
parent bdbe51fe31
commit 28502528f5
2 changed files with 28 additions and 1 deletions

View File

@ -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;

View File

@ -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));
}
}