如何格式化 java.time.Duration mm:ss

问题描述 投票:0回答:3

我有一个java.time.Duration,我想以mm:ss的形式输出它。似乎不可能使用 DateTimeFormatter 因为它只接受 LocalTime、ZonedTIme 等

所以我这样做了,在 90 秒内工作正常,给出 1:30,但在 66 秒内给出 1:6,而我想要 1:06

Duration duration = Duration.ofSeconds(track.getLength().longValue());
System.out.println(duration.toMinutes() + ":" + duration.minusMinutes(duration.toMinutes()).getSeconds());
java java-8 java-time
3个回答
16
投票

您可以创建一个

LocalTime
表示从午夜 (00:00) 开始的持续时间,并使用
DateTimeFormatter
:

LocalTime t = LocalTime.MIDNIGHT.plus(duration);
String s = DateTimeFormatter.ofPattern("m:ss").format(t);

请注意,这仅适用于少于一小时的持续时间。


11
投票

尝试这样

System.out.printf("%d:%02d%n", duration.toMinutes(), duration.minusMinutes(duration.toMinutes()).getSeconds());

    String s = String.format("%d:%02d%n", duration.toMinutes(), duration.minusMinutes(duration.toMinutes()).getSeconds());

格式化为字符串


0
投票

Java 9+

Java 9 引入了

to...Part
例如
Duration#toMinutesPart
方法可以更轻松地从
Duration
对象获取不同部分。

演示

class Main {
    public static void main(String[] args) {
        Duration duration = Duration.ofSeconds(66);
        System.out.printf("%d:%02d%n", duration.toMinutesPart(), duration.toSecondsPart());
    }
}

输出

1:06

在 Ideone 上尝试一下

Trail:日期时间

了解有关现代日期时间 API 的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.