Search code examples
javadatetimedatetime

How can I "pretty print" a Duration in Java?


Does anyone know of a Java library that can pretty print a number in milliseconds in the same way that C# does?

E.g., 123456 ms as a long would be printed as 4d1h3m5s.


Solution

  • Joda Time has a pretty good way to do this using a PeriodFormatterBuilder.

    Quick Win: PeriodFormat.getDefault().print(duration.toPeriod());

    e.g.

    //import org.joda.time.format.PeriodFormatter;
    //import org.joda.time.format.PeriodFormatterBuilder;
    //import org.joda.time.Duration;
    
    Duration duration = new Duration(123456); // in milliseconds
    PeriodFormatter formatter = new PeriodFormatterBuilder()
         .appendDays()
         .appendSuffix("d")
         .appendHours()
         .appendSuffix("h")
         .appendMinutes()
         .appendSuffix("m")
         .appendSeconds()
         .appendSuffix("s")
         .toFormatter();
    String formatted = formatter.print(duration.toPeriod());
    System.out.println(formatted);