java中的“pretty print”持续时间

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

有没有人知道一个java库,可以用毫秒相当于c#打印一个数字?

例如123456毫秒作为一个长将被打印为4d1h3m5s

(可能不准确,但你希望看到我得到什么!!)

提问于
用户回答回答于

Joda时间有一个很好的方法来使用PeriodFormatterBuilder来完成此操作。

快赢: 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);
用户回答回答于

我已经使用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

扫码关注云+社区