Преобразование миллисекунд в формат времени в Java

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

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

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

Если требуется изящное отображение объекта Duration в Java 9 и более новых версиях, вы можете использовать методы toDaysPart(), toHoursPart(), toMinutesPart(), toSecondsPart(). Вот пример кода:

Java
Скопировать код
Duration duration = Duration.ofSeconds(3661);
String formatted = String.format(
    "%dd %dh %dm %ds",
    duration.toDaysPart(),
    duration.toHoursPart(),
    duration.toMinutesPart(),
    duration.toSecondsPart()
);
System.out.println(formatted); // Выведет: "1d 1h 1m 1s". Достаточно эстетично, не так ли?

В Java 8, где указанных методов нет, компоненты вычисляются по отдельности:

Java
Скопировать код
Duration duration = Duration.ofSeconds(3661);
long days = duration.toDays();
long hours = duration.minusDays(days).toHours();
long minutes = duration.minusHours(hours).toMinutes();
long seconds = duration.minusMinutes(minutes).getSeconds();
String formatted = String.format(
    "%dd %dh %dm %ds",
    days, hours, minutes, seconds
);
System.out.println(formatted); // В Java 8 скажут: "Задача выполнена!"
Кинга Идем в IT: пошаговый план для смены профессии

Обработка отображения в Java 8 с помощью Regex

Если представление метода Duration.toString() в Java 8 вас не устраивает, вы можете применить Regex для извлечения необходимых данных или посвоему форматирования строки.

Улучшаем читаемость для людей

Метод DurationFormatUtils.formatDurationWords из библиотеки Apache's commons-lang конвертирует продолжительность в простое англоязычное предложение, что улучшает взаимодействие с пользователями.

Использование Joda-Time для больших временных интервалов

Для работы с продолжительностью в миллионах секунд целесообразно использовать Joda-Time. С помощью Period и PeriodFormat.getDefault().print вы с легкостью обработаете большие временные интервалы.

ThreeTen-Extra для детального форматирования

Библиотека ThreeTen-Extra предлагает расширенные возможности форматирования, включая формат wordBased для интуитивно понятного представления временных интервалов. Java удивительно фаворит английский язык!

Подружить большие интервалы и точность

С помощью метода toPeriod() из Joda-Time вы можете преобразовать Duration в Period, что упростит восприятие больших значений.

Решительные разработчики могут в Java 8 создать свой собственный метод для разбиения времени на части, используя ofHours(), ofMinutes(), ofSeconds(). Это как конструирование из блоков Lego.

Продвинутое форматирование Java 9+

Java 9+ предлагает продвинутые возможности отображения времени, позволяя настраивать вывод продолжительности с помощью плейсхолдеров и метода String.format – настоящее удовольствие для разработчика.

Полезные советы по удалению пробелов

Если вы запутались, стремитесь минимизировать пустое пространство. Отображение времени без пробелов, например, "4d1h3m5s", сделает информацию более читаемой – подумайте о нем как о аккуратно упакованном чемодане, где каждый миллиметр на счету!

Используйте мощь PeriodFormatterBuilder

Для форматирования специфических единиц времени можно воспользоваться PeriodFormatterBuilder с методами .appendX – вы полностью контролируете процесс, как будто выбираете ингредиенты для пиццы.

Визуализация

Представим объект Duration в Java как путешествие по дороге:

Markdown
Скопировать код
Duration: 1 день, 3 часа, 7 минут, 5 секунд

Визуализируем наш путь:

Markdown
Скопировать код
🚗💨 Старт: 0 дней, 0 часов, 0 минут, 0 секунд
|----🌅---|----🕒----|----🏞----|----⏰----|

Добавим немного красок:

Markdown
Скопировать код
🚗💨 1-й день: Наслаждаемся рассветом! (🌅)
🚗💨 3-й час: Время для кофе-брейка! (🕒)
🚗💨 7-я минута: Делаем фото для Instagram. Вид просто потрясающий! (🏞)
🚗💨 5-я секунда: Совсем чуть-чуть и мы на месте! (⏰)

Часовые пояса: сложность глобальных приложений

Глобальные приложения должны учитывать часовые пояса. Важно помнить, что Duration не содержит информации о часовом поясе, это необходимо учесть в своих расчетах.

Внимание на восприятие пользователя

Важно, как пользователь восприимает информацию. Иногда стоит округлить секунды до минут или минуты до часов, чтобы сделать данные более легко воспринимаемыми.

Работа со старыми версиями Java

Если ваши проекты основаны на Java 7 или более ранних версиях, вы можете воспользоваться библиотеками вроде ThreeTen-Backport или разработать свои утилиты. Даже старое может засиять новыми красками, если его хорошо отполировать.

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

  1. Duration (Java Platform SE 8 )документация Java 8 API для Duration.
  2. How to format a duration in java? (e.g format H:MM:SS) – Stack Overflowпримеры форматирования времени в Java.
  3. DateTimeFormatter (Java Platform SE 8 ) — для любителей DateTimeFormatter и пользовательских форматов в Java.
  4. Joda-Time – Home — все об Joda-Time, библиотеке для качественного форматирования времени в Java.
  5. Guide to Java 8 Duration and Period on Baeldungруководство по использованию Duration и Period в Java 8.
  6. DurationFormatUtils (Apache Commons Lang 3.14.0 API) — документация Apache Commons Lang с рядом полезных функций.
  7. Pretty-Print JSON in Java – Stack Overflow — о тонкостях прекрасной печати JSON в Java, в смежной, но особенной теме.