Форматирование длительности в Java: преобразование секунд в Ч:ММ:СС
Быстрый ответ
Duration duration = Duration.ofSeconds(3661);
String formatted = String.format("%d:%02d:%02d",
duration.toHoursPart(),
duration.toMinutesPart(),
duration.toSecondsPart());
System.out.println(formatted); // 1:01:01
Duration.toHoursPart()
,toMinutesPart()
,toSecondsPart()
: эти методы помогают извлечь часы, минуты и секунды из продолжительности.String.format()
: форматирует результаты в соответствие с шаблономЧ:ММ:СС
.- Вывод: Время успешно форматировано и представлено в нужном формате
Ч:ММ:СС
.
Детальное форматирование продолжительности
💡 String.format()
применяет плейсхолдеры, которые следуют определённому формату. Например, %d
обозначает десятичное целое число, %02d
дополняет число до двух знаков, при необходимости добавляя ноль спереди.
До Java 8: Применение арифметики
До появления класса java.time.Duration
(Java 8) продолжительность можно было форматировать при помощи арифметических операций.
int sec = 3661;
int hrs = sec / 3600;
int mins = (sec % 3600) / 60;
int secs = sec % 60;
String formatted = String.format("%d:%02d:%02d", hrs, mins, secs);
System.out.println(formatted); // 1:01:01
⚠️ Не забывайте, что целочисленное деление отбрасывает дробную часть.
Java 8 и выше: Применение Duration
С появлением Java 8 был введён java.time.Duration
, который облегчает работу со временем.
Визуализация
Возьмём в качестве примера путешествие на поезде:
Отправление: 00:00:00
Прибытие: 12:34:56
Используем Duration для расчёта продолжительности:
Duration journeyDuration = Duration.between(departure, arrival);
Результат расчета:
Продолжительность путешествия: **12:34:56**
Продвинутые методы
Для работы с отрицательными значениями используйте Math.abs()
перед форматированием.
Duration negDuration = Duration.ofSeconds(-4995);
String formattedNeg = String.format("%d:%02d:%02d",
Math.abs(negDuration.toHoursPart()),
Math.abs(negDuration.toMinutesPart()),
Math.abs(negDuration.toSecondsPart()));
Для более гибкого контроля можно использовать DateTimeFormatter
или Joda-Time.
Подход Joda-Time
Joda-Time остается актуальным даже с Java 8+, особенно при необходимости использовать PeriodFormatter
для кастомного форматирования.
Period period = new Period(totalMillis);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroRarelyLast()
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
String formatted = formatter.print(period);
Для определения продолжительности между двумя моментами LocalDateTime
:
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = LocalDateTime.now().plusHours(3).plusMinutes(25).plusSeconds(42);
Duration between = Duration.between(start, end);
Полезные материалы
- Duration (Java Platform SE 8)
- Форматирование продолжительности в Java на Stack Overflow
- SimpleDateFormat (Java Platform SE 7)
- DurationFormatUtils (Apache Commons Lang 3.11 API)
- Обзор работы с датами и временем в документации Java
- Как конвертировать миллисекунды в минуты и секунды на Stack Overflow
- Примеры использования Duration в Java