How to format a duration in java? (e.g format H:MM:SS)
Как отформатировать длительность в Java? (например, формат H: MM: SS)
Я хотел бы отформатировать длительность в секундах, используя шаблон типа H: MM: SS. Текущие утилиты на Java предназначены для форматирования времени, но не длительности.
Переведено автоматически
Ответ 1
Если вы не хотите перетаскивать библиотеки, это достаточно просто сделать самостоятельно, используя форматировщик или соответствующий ярлык, например. задается целое количество секунд в секунду.:
String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));
Если вы используете версию Java до 8... вы можете использовать время Joda и PeriodFormatter. Если у вас действительно есть продолжительность (т. Е. Прошедшее количество времени без привязки к календарной системе), то вам, вероятно, следует использовать Duration по большей части - затем вы можете вызвать toPeriod (указав все, что PeriodType вы хотите, чтобы отразить, становится ли 25 часов 1 днем и 1 часом или нет, и т.д.), Чтобы получить Period который вы можете отформатировать.
Если вы используете Java 8 или более позднюю версию: обычно я бы предложил использовать java.time.Duration для представления продолжительности. Затем вы можете вызвать getSeconds() или подобное, чтобы получить целое число для стандартного форматирования строки в соответствии с ответом bobince, если вам нужно - хотя вам следует быть осторожным в ситуации, когда длительность отрицательна, поскольку вы, вероятно, хотите, чтобы в выходной строке был единственный знак отрицания. Итак, что-то вроде:
Форматирование таким способом разумно просто, хотя и раздражающе вручную. Для синтаксического анализа это становится более сложным делом в целом... Вы все равно можете использовать Joda Time даже с Java 8, если, конечно, захотите.
Ответ 4
Это стало проще с Java 9. A Duration по-прежнему не поддается форматированию, но добавлены методы получения часов, минут и секунд, что несколько упрощает задачу: