Преобразовать количество секунд в ЧЧ: ММ (без секунд) в Java - PullRequest
0 голосов
/ 30 апреля 2018

Я знаю, что вы можете использовать DateUtils.formatElapsedTime(seconds) для преобразования количества секунд в String с форматом HH:MM:SS. Но есть ли какие-либо вспомогательные функции, которые позволяют мне выполнять то же преобразование, но без секунд?

Например, я хочу преобразовать 3665 секунд в 1:01, хотя это точно 1:01:05. Другими словами, просто отбрасывая часть секунд.

сильно предпочел бы ответ, который указывает на функцию полезности (если таковая существует), а не на кучу алгоритмов домашнего проката.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

MadProgrammer уже предоставил хороший ответ по Java 8 (который будет работать в Java 6 и 7 также при использовании ThreeTen Backport). В Java 9 еще больше вычислений можно выполнить в библиотеке:

    int seconds = 3665;
    Duration dur = Duration.ofSeconds(seconds);
    String formatted = String.format("%d:%02d", dur.toHours(), dur.toMinutesPart());
    System.out.println(formatted);

Выход:

1: 01

Метод toMinutesPart и другие методы toXxxPart были введены в Java 9.

0 голосов
/ 30 апреля 2018

Используйте Apache Commons Lang

Вы можете использовать служебный класс DateFormatUtils из известной служебной библиотеки Apache Commons Lang в сочетании с TimeUnit для преобразования из секунд в миллисекунды:

static String format(long durationSeconds) {
    long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds);
    // Commons lang:
    return DurationFormatUtils.formatDuration(durationMillis, "HH:mm");
}

Использовать с вводом 3665 он печатает:

01: 01

Лично я предпочел бы использовать стандартную библиотеку Java8 или Java9 (см. Другие ответы), а не вводить зависимость просто для вызова метода 1.

0 голосов
/ 30 апреля 2018

Судя по имеющейся информации, вы хотите отформатировать значение на основе продолжительности. К счастью для нас, после Java 8 появился новый java.time API, который включает Duration класс.

К сожалению, он не поддерживает (по крайней мере, в последний раз) поддержку форматера для него.

Тем не менее, вы можете легко бросить свой собственный ...

protected static String format(Duration duration) {
    long hours = duration.toHours();
    long mins = duration.minusHours(hours).toMinutes();
    return String.format("%02d:%02d", hours, mins);
}

Который при использовании с чем-то вроде ...

System.out.println(format(Duration.ofSeconds(3665)));

распечатывает 01:01.

Теперь я знаю, что вы бы "предпочли" служебные методы, но вы вряд ли найдете что-то, что соответствует вашим "любым" потребностям, и это, по крайней мере, даст вам отправную точку. Кроме того, вы всегда можете сделать пулл-запрос;)

...