diff --git a/core/src/main/java/hudson/Util.java b/core/src/main/java/hudson/Util.java index ddcf6eb0b2..57bd571063 100644 --- a/core/src/main/java/hudson/Util.java +++ b/core/src/main/java/hudson/Util.java @@ -487,6 +487,8 @@ public class Util { long minutes = duration / ONE_MINUTE_MS; duration %= ONE_MINUTE_MS; long seconds = duration / ONE_SECOND_MS; + duration %= ONE_SECOND_MS; + long millisecs = duration; if (years > 0) return makeTimeSpanString(years, Messages.Util_year(years), months, Messages.Util_month(months)); @@ -498,9 +500,14 @@ public class Util { return makeTimeSpanString(hours, Messages.Util_hour(hours), minutes, Messages.Util_minute(minutes)); else if (minutes > 0) return makeTimeSpanString(minutes, Messages.Util_minute(minutes), seconds, Messages.Util_second(seconds)); - else - // Durations less than a minute are only expressed in seconds (no ms). + else if (seconds >= 10) return Messages.Util_second(seconds); + else if (seconds >= 1) + return Messages.Util_second(seconds+"."+millisecs/100); // render "1.2 sec" + else if(millisecs>=100) + return Messages.Util_second(String.format("0.%02d",millisecs/10)); // render "0.12 sec". + else + return Messages.Util_millisecond(millisecs); } diff --git a/core/src/main/resources/hudson/Messages.properties b/core/src/main/resources/hudson/Messages.properties index 48c4a43875..3c5c6c955b 100644 --- a/core/src/main/resources/hudson/Messages.properties +++ b/core/src/main/resources/hudson/Messages.properties @@ -3,6 +3,7 @@ FilePath.validateAntFileMask.whitespaceSeprator=\ FilePath.validateAntFileMask.doesntMatchAndSuggest=\ ''{0}'' doesn''t match anything, but ''{1}'' does. Perhaps that''s what you mean? +Util.millisecond={0} ms Util.second={0} sec Util.minute={0} min Util.hour ={0} hr diff --git a/core/src/test/java/hudson/UtilTest.java b/core/src/test/java/hudson/UtilTest.java index 72d5d2b985..e84fe301c8 100644 --- a/core/src/test/java/hudson/UtilTest.java +++ b/core/src/test/java/hudson/UtilTest.java @@ -55,6 +55,16 @@ public class UtilTest extends TestCase { assertEquals(Messages.Util_minute(1) + " " + Messages.Util_second(7), Util.getTimeSpanString(67000L)); // 17 seconds - Check that times less than a minute only use seconds. assertEquals(Messages.Util_second(17), Util.getTimeSpanString(17000L)); + // 1712ms -> 1.7sec + assertEquals(Messages.Util_second(1.7), Util.getTimeSpanString(1712L)); + // 171ms -> 0.17sec + assertEquals(Messages.Util_second(0.17), Util.getTimeSpanString(171L)); + // 101ms -> 0.10sec + assertEquals(Messages.Util_second("0.10"), Util.getTimeSpanString(101L)); + // 17ms + assertEquals(Messages.Util_millisecond(17), Util.getTimeSpanString(17L)); + // 1ms + assertEquals(Messages.Util_millisecond(1), Util.getTimeSpanString(1L)); }