diff --git a/src/main/java/org/apache/commons/lang3/time/StopWatch.java b/src/main/java/org/apache/commons/lang3/time/StopWatch.java index 1046844df2e..1564c5442bf 100644 --- a/src/main/java/org/apache/commons/lang3/time/StopWatch.java +++ b/src/main/java/org/apache/commons/lang3/time/StopWatch.java @@ -327,7 +327,7 @@ public StopWatch(final String message) { * @since 3.10 */ public String formatSplitTime() { - return DurationFormatUtils.formatDurationHMS(DurationUtils.toMillisInt(getSplitDuration())); + return DurationFormatUtils.formatDurationHMS(DurationUtils.toMillisLong(getSplitDuration())); } /** diff --git a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java index d42b790322b..03458972ce7 100644 --- a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java +++ b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java @@ -147,6 +147,17 @@ void testFormatSplitTime() { assertTrue(formatSplitTime.startsWith(ZERO_HOURS_PREFIX), "formatSplitTime"); } + @Test + void testFormatSplitTimeExceedingIntMillis() throws Exception { + final StopWatch watch = StopWatch.createStarted(); + // Backdate the start so the split spans more than Integer.MAX_VALUE milliseconds (about 24.86 days). + FieldUtils.writeField(watch, "startTimeNanos", System.nanoTime() - TimeUnit.DAYS.toNanos(30), true); + watch.split(); + final long splitMillis = watch.getSplitDuration().toMillis(); + assertTrue(splitMillis > Integer.MAX_VALUE, "precondition: split must exceed Integer.MAX_VALUE millis"); + assertEquals(DurationFormatUtils.formatDurationHMS(splitMillis), watch.formatSplitTime(), "formatSplitTime"); + } + @Test void testFormatSplitTimeWithMessage() { final StopWatch watch = new StopWatch(MESSAGE);