From f9a80cbbfe5585772ea16fddfeb728c74bc04b2d Mon Sep 17 00:00:00 2001 From: Mitchell Wills Date: Tue, 22 Sep 2015 15:30:08 -0700 Subject: [PATCH] Fix TimeUtils.formatDuration for exactly one of a unit Previously printing a duration where a unit (except ms) was one and the next smallest unit was zero would result in the duration being being expressed in the next smallest unit. For example 1m0s0ms would be formatted as 60s0ms. Update testFormatHugeDuration to supporting times > 999 days The implementation was fixed in 3d1933c45fe9ba2389ebd166d96abeceab1971d1 Change-Id: I9d609f7a0f82755ea653a205293a6e3785a10d1e --- core/java/android/util/TimeUtils.java | 6 +++--- .../coretests/src/android/util/TimeUtilsTest.java | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index c1eb80d28690f..37d675707a84b 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -343,15 +343,15 @@ public class TimeUtils { int seconds = (int) Math.floor(duration / 1000); int days = 0, hours = 0, minutes = 0; - if (seconds > SECONDS_PER_DAY) { + if (seconds >= SECONDS_PER_DAY) { days = seconds / SECONDS_PER_DAY; seconds -= days * SECONDS_PER_DAY; } - if (seconds > SECONDS_PER_HOUR) { + if (seconds >= SECONDS_PER_HOUR) { hours = seconds / SECONDS_PER_HOUR; seconds -= hours * SECONDS_PER_HOUR; } - if (seconds > SECONDS_PER_MINUTE) { + if (seconds >= SECONDS_PER_MINUTE) { minutes = seconds / SECONDS_PER_MINUTE; seconds -= minutes * SECONDS_PER_MINUTE; } diff --git a/core/tests/coretests/src/android/util/TimeUtilsTest.java b/core/tests/coretests/src/android/util/TimeUtilsTest.java index 74c8e04b8dc17..237062748f9f9 100644 --- a/core/tests/coretests/src/android/util/TimeUtilsTest.java +++ b/core/tests/coretests/src/android/util/TimeUtilsTest.java @@ -436,15 +436,17 @@ public class TimeUtilsTest extends TestCase { assertFormatDuration("+100ms", 100); assertFormatDuration("+101ms", 101); assertFormatDuration("+330ms", 330); + assertFormatDuration("+1s0ms", 1000); assertFormatDuration("+1s330ms", 1330); assertFormatDuration("+10s24ms", 10024); + assertFormatDuration("+1m0s30ms", 60030); + assertFormatDuration("+1h0m0s30ms", 3600030); + assertFormatDuration("+1d0h0m0s30ms", 86400030); } public void testFormatHugeDuration() { - //assertFormatDuration("+15542d1h11m11s555ms", 1342833071555L); - // TODO: improve formatDuration() API - assertFormatDuration("+999d23h59m59s999ms", 1342833071555L); - assertFormatDuration("-999d23h59m59s999ms", -1342833071555L); + assertFormatDuration("+15542d1h11m11s555ms", 1342833071555L); + assertFormatDuration("-15542d1h11m11s555ms", -1342833071555L); } private void assertFormatDuration(String expected, long duration) {