如何在Java中“漂亮地打印”持续时间?
有谁知道一个Java库,它可以像C#一样在几毫秒内打印一个数字?
例如,123456毫秒作为长线将被打印为4d1h3m5s。
有谁知道一个Java库,它可以像C#一样在几毫秒内打印一个数字?
例如,123456毫秒作为长线将被打印为4d1h3m5s。
我构建了一个简单的解决方案,使用Java 8和一些正则表达式:Duration.toString()
public static String humanReadableFormat(Duration duration) {
return duration.toString()
.substring(2)
.replaceAll("(\\d[HMS])(?!$)", "$1 ")
.toLowerCase();
}
结果将如下所示:
- 5h
- 7h 15m
- 6h 50m 15s
- 2h 5s
- 0.1s
如果您不希望两者之间有空格,只需删除 .replaceAll
Joda Time有一个很好的方法来使用CymeterFormatterBuilder来做到这一点。
快速获胜:PeriodFormat.getDefault().print(duration.toPeriod());
例如:
//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);