java.time
java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*。
使用现代日期时间 API java.time 的解决方案:
您可以使用java.time.Duration,它以ISO-8601 standards 为蓝本,并作为JSR-310 implementation 的一部分引入Java-8。 Java-9 引入了一些更方便的方法。
演示:
import java.time.Duration;
public class Main {
public static void main(String[] args) {
int minutes = 123;
Duration duration = Duration.ofMinutes(minutes);
// Default format
System.out.println(duration);
// Custom format
// ####################################Java-8####################################
String formattedDuration = String.format("%d:%02d", duration.toHours(), duration.toMinutes() % 60);
System.out.println(formattedDuration);
// ##############################################################################
// ####################################Java-9####################################
formattedDuration = String.format("%d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
duration.toSecondsPart());
System.out.println(formattedDuration);
// ##############################################################################
}
}
输出:
PT2H3M
2:03
2:03
ONLINE DEMO
通过 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
当您说 123 分钟时,它与时区无关,即 123 分钟的持续时间在任何时区都将具有相同的值。检查Duration is not the same as Date-Time 以了解日期时间和持续时间之间的区别。通俗地说,Date-Time 就像一个向量,而 Duration 就像一个标量。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。