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

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

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

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

Вы можете использовать класс SimpleDateFormat для конвертации миллисекунд:

Java
Скопировать код
long ms = YOUR_MILLIS; // Замените сюда ваше значение в миллисекундах
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
String time = format.format(new Date(ms – TimeZone.getDefault().getRawOffset()));
// Время преобразовано в формат «чч:мм:сс»

Важное замечание: не забудьте учесть смещение времени по вашему часовому поясу для корректного отображения времени UTC.

Кинга Идем в IT: пошаговый план для смены профессии

Разбор подхода с использованием TimeUnit

Класс TimeUnit в Java позволяет упростить конвертацию времени:

Java
Скопировать код
long milliseconds = 123456789;

long hours = TimeUnit.MILLISECONDS.toHours(milliseconds);
long remainMilliseconds = milliseconds – TimeUnit.HOURS.toMillis(hours);

long minutes = TimeUnit.MILLISECONDS.toMinutes(remainMilliseconds);
remainMilliseconds -= TimeUnit.MINUTES.toMillis(minutes);

long seconds = TimeUnit.MILLISECONDS.toSeconds(remainMilliseconds) – TimeUnit.MINUTES.toSeconds(minutes);

String formattedTime = String.format("%02d:%02d:%02d", hours, minutes, seconds);

Для поддержания формата «чч:мм:сс» используем String.format, что добавляет выводу аккуратности за счёт ведущих нулей.

Преобразование времени через java.time

Появление java.time в Java 8 облегчило работу со временем:

Java
Скопировать код
Instant instantFromEpoch = Instant.ofEpochMilli(milliseconds);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.of("UTC"));
String formatted = formatter.format(instantFromEpoch);

Благодаря обработке исключительных ситуаций, например, переход на летнее/зимнее время или секунда, возникающая в високосные годы, java.time становится максимально надежным инструментом.

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

Преобразование миллисекунд в «чч:мм:сс» можно подставить в контекст определения продолжительности фильма:

Markdown
Скопировать код
| Количество миллисекунд       | Это соответствует          |
| ---------------------------- | -------------------------- |
| 3 600 000                    | 1 час (средняя продолжительность хорошего фильма)  |
| 60 000                       | 1 минута (ожидание разогрева пищи в микроволновке) | 
| 1 000                        | 1 секунда (время, за которое возникает мысль о Java)  |

Теперь мы можем применить наши знания:

Java
Скопировать код
long milliseconds = 5500000;
long hours = (milliseconds / 3_600_000) % 24;
long minutes = (milliseconds / 60_000) % 60;
long seconds = (milliseconds / 1_000) % 60;

String formattedTime = String.format("%02d:%02d:%02d", hours, minutes, seconds);

Вуаля! Теперь продолжительность фильма выражена в формате «чч:мм:сс». Пора подготовить попкорн и начать просмотр!

Добавляем универсальности

Создание универсального метода форматирования времени оставляет отпечаток мастерства:

Java
Скопировать код
public static String formatMillisToHHMMSS(long ms) {
    long hours = TimeUnit.MILLISECONDS.toHours(ms);
    long minutes = (TimeUnit.MILLISECONDS.toMinutes(ms) % 60);
    long seconds = (TimeUnit.MILLISECONDS.toSeconds(ms) % 60);

    return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}

Если требуется более продвинутая функциональность, на помощь приходит DurationFormatUtils из Apache Commons:

Java
Скопировать код
String formattedDuration = DurationFormatUtils.formatDuration(milliseconds, "HH:mm:ss,SSS");

Такой подход также умеет работать с миллисекундами, что идеально подходит для задач, где важна точность до долей секунды.

Проверка полученного результата

Проверьте свой метод на разнообразных данных — это признак качественного кода:

Java
Скопировать код
long[] testMillis = {0, 1000, 123450, 3600000, 86399999};
for (long millis : testMillis) {
    System.out.println(formatMillisToHHMMSS(millis));
}

Такие тесты помогают убедиться в безупречной работе вашего решения.

Решение на все случаи жизни

Для тех, кто работает со старыми версиями Java, подходит подход с использованием класса SimpleDateFormat:

Java
Скопировать код
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // Убедитесь, что вы устанавливаете часовой пояс UTC, чтобы избежать неправильного смещения времени.
String formatted = sdf.format(new Date(milliseconds));

Не забывайте устанавливать часовой пояс UTC, чтобы избежать возможных ошибок при смещении времени.

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

  1. DateFormat (Java Platform SE 8) — официальная документация Java по форматированию даты и времени.
  2. Java SimpleDateFormat – Java Date Format — гайд по использованию SimpleDateFormat в Java.
  3. Java – Разница между двумя датами — как верно рассчитать разницу между датами.
  4. Как преобразовать миллисекунды в "X минут, X секунд" в Java? – Stack Overflow — множество решений для преобразования миллисекунд в понятный формат от сообщества.
  5. Java67 — уроки и примеры использования форматирования времени в Java.
Свежие материалы