Если вы используете версию Java до 8 ... вы можете использовать Joda Time и PeriodFormatter
. Если у вас действительно есть длительность (то есть истекшее количество времени, без ссылки на систему календаря), то вам, вероятно, следует использовать Duration
по большей части - тогда вы можете позвонить toPeriod
(указав любое значение PeriodType
вы хотите отразить, станет ли 25 часов 1 днем и 1 часом и т. д.), чтобы получить Period
, который вы можете отформатировать.
Если вы используете Java 8 или более позднюю версию: обычно я рекомендую использовать java.time.Duration
для представления продолжительности. Затем вы можете позвонить getSeconds()
или тому подобное, чтобы получить целое число для стандартного форматирования строки в соответствии с ответом Бобинса, если вам нужно - хотя вы должны быть осторожны с ситуацией, когда длительность отрицательна, поскольку вы, вероятно, хотите сингл отрицательный знак в выходной строке. Так что-то вроде:
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;
}
Форматировать таким способом достаточно просто, если надоедливо вручную. Для разбора это становится сложнее в общем ... Вы все равно можете использовать Joda Time даже с Java 8, если хотите, конечно.