我有一部时长为127秒的电影。我想将它显示为
02:07
。实现这个的最佳方法是什么?Duration yourDuration = //...
Period period = yourDuration.toPeriod();
PeriodFormatter minutesAndSeconds = new PeriodFormatterBuilder()
.printZeroAlways()
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
String result = minutesAndSeconds.print(period);
我需要这个东西,但我觉得Llyas的回答不准确。我想要一个计时器,而他的回答在我还剩0小时1分钟时给出了0:1
- 但这很容易通过一行代码来解决!
Period p = time.toPeriod();
PeriodFormatter hm = new PeriodFormatterBuilder()
.printZeroAlways()
.minimumPrintedDigits(2) // gives the '01'
.appendHours()
.appendSeparator(":")
.appendMinutes()
.toFormatter();
String result = hm.print(p);
这将为你提供 02:07
!
minimumPrintedDigits(2)
正是我所需要的。 - Amos M. Carpenter以下是来自 Joda-Time首页的通知:
请注意,从Java SE 8开始,用户被要求迁移到
java.time
(JSR-310) - JDK的核心部分,取代了该项目。
java.time
的解决方案您可以使用{{link2:java.time.Duration
}},它基于{{link3:ISO-8601标准}}并在Java-8中作为{{link4:JSR-310实现}}的一部分引入。在Java-9中还引入了一些更方便的方法。
演示:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.ofSeconds(127);
// Default format
System.out.println(duration);
// Custom format
// ####################################Java-8####################################
String formattedElapsedTime = String.format("%02d:%02d", duration.toMinutes(), duration.toSeconds() % 60);
System.out.println(formattedElapsedTime);
// ##############################################################################
// ####################################Java-9####################################
formattedElapsedTime = String.format("%02d:%02d", duration.toMinutesPart(),
duration.toSecondsPart());
System.out.println(formattedElapsedTime);
// ##############################################################################
}
}
输出:
PT2M7S
02:07
02:07
从教程:日期时间了解现代日期时间 API。
org.apache.commons.lang.time.DurationFormatUtils
进行了临时实现。 - fedor.belov