Merge pull request #4161 from asukavuuyn/v5-dev

fix:12小时制ceiling和round问题
This commit is contained in:
Golden Looly 2025-11-26 17:22:07 +08:00 committed by GitHub
commit ab936327a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 2 deletions

View File

@ -73,13 +73,13 @@ public class DateModifier {
case ROUND: case ROUND:
int min = isAM ? 0 : 12; int min = isAM ? 0 : 12;
int max = isAM ? 11 : 23; 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); int value = calendar.get(Calendar.HOUR_OF_DAY);
calendar.set(Calendar.HOUR_OF_DAY, (value < href) ? min : max); calendar.set(Calendar.HOUR_OF_DAY, (value < href) ? min : max);
break; break;
} }
// 处理下一级别字段 // 处理下一级别字段
return modify(calendar, dateField + 1, modifyType); return modify(calendar, dateField + 1, modifyType, truncateMillisecond);
} }
final int endField = truncateMillisecond ? Calendar.SECOND : Calendar.MILLISECOND; final int endField = truncateMillisecond ? Calendar.SECOND : Calendar.MILLISECOND;

View File

@ -130,6 +130,33 @@ public class DateUtilTest {
assertEquals("2020-02-29 12:59:59.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); 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 @Test
public void ceilingDayTest() { public void ceilingDayTest() {
final String dateStr2 = "2020-02-29 12:59:34"; final String dateStr2 = "2020-02-29 12:59:34";