Преобразование миллисекунд в формат времени в Java
Быстрый ответ
Если требуется изящное отображение объекта Duration
в Java 9 и более новых версиях, вы можете использовать методы toDaysPart()
, toHoursPart()
, toMinutesPart()
, toSecondsPart()
. Вот пример кода:
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, где указанных методов нет, компоненты вычисляются по отдельности:
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 скажут: "Задача выполнена!"
Обработка отображения в 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 как путешествие по дороге:
Duration: 1 день, 3 часа, 7 минут, 5 секунд
Визуализируем наш путь:
🚗💨 Старт: 0 дней, 0 часов, 0 минут, 0 секунд
|----🌅---|----🕒----|----🏞----|----⏰----|
Добавим немного красок:
🚗💨 1-й день: Наслаждаемся рассветом! (🌅)
🚗💨 3-й час: Время для кофе-брейка! (🕒)
🚗💨 7-я минута: Делаем фото для Instagram. Вид просто потрясающий! (🏞)
🚗💨 5-я секунда: Совсем чуть-чуть и мы на месте! (⏰)
Часовые пояса: сложность глобальных приложений
Глобальные приложения должны учитывать часовые пояса. Важно помнить, что Duration
не содержит информации о часовом поясе, это необходимо учесть в своих расчетах.
Внимание на восприятие пользователя
Важно, как пользователь восприимает информацию. Иногда стоит округлить секунды до минут или минуты до часов, чтобы сделать данные более легко воспринимаемыми.
Работа со старыми версиями Java
Если ваши проекты основаны на Java 7 или более ранних версиях, вы можете воспользоваться библиотеками вроде ThreeTen-Backport или разработать свои утилиты. Даже старое может засиять новыми красками, если его хорошо отполировать.
Полезные материалы
- Duration (Java Platform SE 8 ) — документация Java 8 API для
Duration
. - How to format a duration in java? (e.g format H:MM:SS) – Stack Overflow — примеры форматирования времени в Java.
- DateTimeFormatter (Java Platform SE 8 ) — для любителей DateTimeFormatter и пользовательских форматов в Java.
- Joda-Time – Home — все об Joda-Time, библиотеке для качественного форматирования времени в Java.
- Guide to Java 8 Duration and Period on Baeldung — руководство по использованию Duration и Period в Java 8.
- DurationFormatUtils (Apache Commons Lang 3.14.0 API) — документация Apache Commons Lang с рядом полезных функций.
- Pretty-Print JSON in Java – Stack Overflow — о тонкостях прекрасной печати JSON в Java, в смежной, но особенной теме.