Как отформатировать продолжительность в Java? (например, формат H:MM:SS)

146
задан naXa 12 December 2018 в 18:36
поделиться

3 ответа

При использовании версии Java до 8... можно использовать Время Joda и PeriodFormatter . Если Вы действительно получили продолжительность (т.е. прошедшее количество времени, без ссылки на систему календаря) затем необходимо, вероятно, использовать Duration по большей части - можно затем звонить toPeriod (указывающий любой PeriodType, Вы хотите отразиться, становятся ли 25 часов 1 днем и 1 часом или нет, и т.д.) добираться Period, который можно отформатировать.

, Если Вы используете Java 8 или позже: я обычно предлагал бы использовать java.time.Duration для представления продолжительности. Можно затем звонить getSeconds() и т.п. для получения целого числа для стандартного строкового форматирования согласно ответу bobince, если Вам нужно к - хотя необходимо остерегаться ситуации, где продолжительность отрицательна, как Вы, вероятно, хотите единственный знак минус в выходной строке. Так что-то как:

public static String formatDuration(Duration duration) {
    long seconds = duration.getSeconds();
    long absSeconds = Math.abs(seconds);
    String positive = String.format(
        "%d:%02d:%02d",
        absSeconds / 3600,
        (absSeconds % 3600) / 60,
        absSeconds % 60);
    return seconds < 0 ? "-" + positive : positive;
}

Форматирование этого пути обоснованно просто, если раздражающе ручной. Для [1 112] парсинг это становится более твердым вопросом в целом... Вы могли все еще использовать Время Joda даже с Java 8, если Вы хотите, конечно.

76
ответ дан 23 November 2019 в 22:38
поделиться

Это будет одной из новых возможностей в java 7

JSR-310

6
ответ дан 23 November 2019 в 22:38
поделиться

Если Вы не хотите притягивать библиотеки, достаточно просто сделать себя с помощью Средства форматирования, или связанного ярлыка, например, данного целого числа секунд s:

  String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));
184
ответ дан 23 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: