diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/DateTimeUtils.java b/common/source/java/ch/systemsx/cisd/common/utilities/DateTimeUtils.java index cbc09b4f8dfa954dd5901c34fd05b9280abb25b0..c52bed6ae1df1cd051ec8858a74f1b6a585af3a7 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/DateTimeUtils.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/DateTimeUtils.java @@ -57,41 +57,45 @@ public final class DateTimeUtils zoneString.append(prependZeroIfNeeded(num)); return "GMT" + zoneString.toString(); } - + private final static String prependZeroIfNeeded(final int num) { return num < 10 ? "0" + num : "" + num; } - + /** - * Renders the specified duration. + * Renders the specified duration. If time is negative it is rendered as "?". */ - public static String renderDuration(long durationInMilliseconds) + public static String renderDuration(long durationInMillisecondsOrNeg) { - if (durationInMilliseconds < 1000) + if (durationInMillisecondsOrNeg < 0) + { + return "?"; + } + if (durationInMillisecondsOrNeg < 1000) { - return render(durationInMilliseconds, "millisecond"); + return render(1, "sec"); } - long durationInSeconds = (durationInMilliseconds + 500) / 1000; + long durationInSeconds = (durationInMillisecondsOrNeg + 500) / 1000; if (durationInSeconds < 100) { - return render(durationInSeconds, "second"); + return render(durationInSeconds, "sec"); } long durationInMinutes = (durationInSeconds + 30) / 60; if (durationInMinutes < 60) { - return render(durationInMinutes, "minute"); + return render(durationInMinutes, "min"); } long minutes = durationInMinutes % 60; long hours = durationInMinutes / 60; - return render(hours, "hour") + " and " + render(minutes, "minute"); + return render(hours, "h") + " " + render(minutes, "min"); } - + private static String render(long value, String unit) { - return value == 1 ? value + " " + unit : value + " " + unit + "s"; + return value + unit; } - + /** * Extends the given <var>date</var> until the end of the day. */ @@ -101,5 +105,4 @@ public final class DateTimeUtils Calendar.DAY_OF_MONTH), 1), -1); } - } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DateTimeUtilsTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DateTimeUtilsTest.java index 78f5cae4ff61abfd7d3dab02d92287924b8b2321..148e70aebb6e98863a4230557b81b81cfc0fc1ce 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DateTimeUtilsTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DateTimeUtilsTest.java @@ -34,17 +34,17 @@ public class DateTimeUtilsTest extends AssertJUnit @Test public void testRenderDuration() { - assertEquals("42 milliseconds", DateTimeUtils.renderDuration(42)); - assertEquals("1 second", DateTimeUtils.renderDuration(1000)); - assertEquals("42 seconds", DateTimeUtils.renderDuration(42 * 1000 + 499)); - assertEquals("42 seconds", DateTimeUtils.renderDuration(42 * 1000 - 499)); - assertEquals("99 seconds", DateTimeUtils.renderDuration(99 * 1000)); - assertEquals("2 minutes", DateTimeUtils.renderDuration(100 * 1000)); - assertEquals("42 minutes", DateTimeUtils.renderDuration(42 * 1000 * 60)); - assertEquals("59 minutes", DateTimeUtils.renderDuration(59 * 1000 * 60)); - assertEquals("1 hour and 0 minutes", DateTimeUtils.renderDuration(60 * 1000 * 60)); - assertEquals("1 hour and 1 minute", DateTimeUtils.renderDuration(61 * 1000 * 60)); - assertEquals("2 hours and 3 minutes", DateTimeUtils.renderDuration(123 * 1000 * 60)); + assertEquals("1sec", DateTimeUtils.renderDuration(42)); + assertEquals("1sec", DateTimeUtils.renderDuration(1000)); + assertEquals("42sec", DateTimeUtils.renderDuration(42 * 1000 + 499)); + assertEquals("42sec", DateTimeUtils.renderDuration(42 * 1000 - 499)); + assertEquals("99sec", DateTimeUtils.renderDuration(99 * 1000)); + assertEquals("2min", DateTimeUtils.renderDuration(100 * 1000)); + assertEquals("42min", DateTimeUtils.renderDuration(42 * 1000 * 60)); + assertEquals("59min", DateTimeUtils.renderDuration(59 * 1000 * 60)); + assertEquals("1h 0min", DateTimeUtils.renderDuration(60 * 1000 * 60)); + assertEquals("1h 1min", DateTimeUtils.renderDuration(61 * 1000 * 60)); + assertEquals("2h 3min", DateTimeUtils.renderDuration(123 * 1000 * 60)); } @Test