У Java 9 це простіше:
Duration elapsedTime = Duration.ofMillis(millisDiff );
String humanReadableElapsedTime = String.format(
"%d hours, %d mins, %d seconds",
elapsedTime.toHours(),
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart());
Це створює подібний рядок 0 hours, 39 mins, 9 seconds
.
Якщо ви хочете округлити цілі секунди перед форматуванням:
elapsedTime = elapsedTime.plusMillis(500).truncatedTo(ChronoUnit.SECONDS);
Не залишати годин, якщо вони дорівнюють 0:
long hours = elapsedTime.toHours();
String humanReadableElapsedTime;
if (hours == 0) {
humanReadableElapsedTime = String.format(
"%d mins, %d seconds",
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart());
} else {
humanReadableElapsedTime = String.format(
"%d hours, %d mins, %d seconds",
hours,
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart());
}
Тепер ми можемо мати, наприклад 39 mins, 9 seconds
.
Щоб надрукувати хвилини та секунди з нульовим 02
початковим значенням, щоб вони завжди були двозначними, просто вставте у відповідні специфікатори формату, таким чином:
String humanReadableElapsedTime = String.format(
"%d hours, %02d mins, %02d seconds",
elapsedTime.toHours(),
elapsedTime.toMinutesPart(),
elapsedTime.toSecondsPart());
Тепер ми можемо мати, наприклад 0 hours, 39 mins, 09 seconds
.