Форматирование длительности в Java: преобразование секунд в Ч:ММ:СС

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

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(): форматирует результаты в соответствие с шаблоном Ч:ММ:СС.
  • Вывод: Время успешно форматировано и представлено в нужном формате Ч:ММ:СС.
Кинга Идем в IT: пошаговый план для смены профессии

Детальное форматирование продолжительности

💡 String.format() применяет плейсхолдеры, которые следуют определённому формату. Например, %d обозначает десятичное целое число, %02d дополняет число до двух знаков, при необходимости добавляя ноль спереди.

До Java 8: Применение арифметики

До появления класса java.time.Duration (Java 8) продолжительность можно было форматировать при помощи арифметических операций.

Java
Скопировать код
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 для расчёта продолжительности:

Java
Скопировать код
Duration journeyDuration = Duration.between(departure, arrival);

Результат расчета:

Продолжительность путешествия: **12:34:56**

Продвинутые методы

Для работы с отрицательными значениями используйте Math.abs() перед форматированием.

Java
Скопировать код
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 для кастомного форматирования.

Java
Скопировать код
Period period = new Period(totalMillis);
PeriodFormatter formatter = new PeriodFormatterBuilder()
    .printZeroRarelyLast()
    .appendHours()
    .appendSeparator(":")
    .appendMinutes()
    .appendSeparator(":")
    .appendSeconds()
    .toFormatter();
String formatted = formatter.print(period);

Для определения продолжительности между двумя моментами LocalDateTime:

Java
Скопировать код
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = LocalDateTime.now().plusHours(3).plusMinutes(25).plusSeconds(42);

Duration between = Duration.between(start, end);

Полезные материалы

  1. Duration (Java Platform SE 8)
  2. Форматирование продолжительности в Java на Stack Overflow
  3. SimpleDateFormat (Java Platform SE 7)
  4. DurationFormatUtils (Apache Commons Lang 3.11 API)
  5. Обзор работы с датами и временем в документации Java
  6. Как конвертировать миллисекунды в минуты и секунды на Stack Overflow
  7. Примеры использования Duration в Java