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.
Formatting Dates String pattern = "yyyy-MM-dd"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); String date = simpleDateFormat. format(new Date()); System. out. println(date);
We can create a Duration object by using one of the Duration class factory methods: static Duration of(long amount, TemporalUnit unit): Obtains a Duration representing an amount in the specified unit. static Duration ofDays(long days): Obtains a Duration representing a number of standard 24 hour days.
I've built a simple solution, using Java 8's Duration.toString() and a bit of regex:
public static String humanReadableFormat(Duration duration) {     return duration.toString()             .substring(2)             .replaceAll("(\\d[HMS])(?!$)", "$1 ")             .toLowerCase(); }   The result will look like:
- 5h - 7h 15m - 6h 50m 15s - 2h 5s - 0.1s   If you don't want spaces between, just remove replaceAll.
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); 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With