Как отформатировать java.time.Duration мм: сс

У меня есть java.time.Duration, и я хочу вывести его в виде мм:сс. Не представляется возможным использовать 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());

person Paul Taylor    schedule 23.02.2015    source источник


Ответы (2)


Вы можете создать LocalTime, представляющий продолжительность с полуночи (00:00), и использовать DateTimeFormatter:

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

Обратите внимание, что это будет работать только для продолжительности менее одного часа.

person assylias    schedule 23.02.2015
comment
Если вы превысите 24 часа, это решение не сработает. - person Meno Hochschild; 23.02.2015
comment
@MenoHochschild на самом деле больше 59:59 минут. Согласовано. - person assylias; 23.02.2015

попробуй так

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

or

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

форматировать в строку

person Evgeniy Dorofeev    schedule 23.02.2015
comment
Спасибо, но вывод на самом деле должен быть в html-файле, а не просто выводиться в System.out, разве DateTIme не предлагает решения. - person Paul Taylor; 23.02.2015
comment
спасибо, это работает, но я искал решение в экосфере даты и времени - person Paul Taylor; 23.02.2015
comment
Для меня гораздо более чистое решение. Экосфера даты и времени не обрабатывает форматирование продолжительности. - person Meno Hochschild; 23.02.2015