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