Преобразование миллисекунд в формат 'чч:мм:сс' в Java
Быстрый ответ
Вы можете использовать класс SimpleDateFormat
для конвертации миллисекунд:
long ms = YOUR_MILLIS; // Замените сюда ваше значение в миллисекундах
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
String time = format.format(new Date(ms – TimeZone.getDefault().getRawOffset()));
// Время преобразовано в формат «чч:мм:сс»
Важное замечание: не забудьте учесть смещение времени по вашему часовому поясу для корректного отображения времени UTC.
Разбор подхода с использованием TimeUnit
Класс TimeUnit
в 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 облегчило работу со временем:
Instant instantFromEpoch = Instant.ofEpochMilli(milliseconds);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.of("UTC"));
String formatted = formatter.format(instantFromEpoch);
Благодаря обработке исключительных ситуаций, например, переход на летнее/зимнее время или секунда, возникающая в високосные годы, java.time
становится максимально надежным инструментом.
Визуализация
Преобразование миллисекунд в «чч:мм:сс» можно подставить в контекст определения продолжительности фильма:
| Количество миллисекунд | Это соответствует |
| ---------------------------- | -------------------------- |
| 3 600 000 | 1 час (средняя продолжительность хорошего фильма) |
| 60 000 | 1 минута (ожидание разогрева пищи в микроволновке) |
| 1 000 | 1 секунда (время, за которое возникает мысль о 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);
Вуаля! Теперь продолжительность фильма выражена в формате «чч:мм:сс». Пора подготовить попкорн и начать просмотр!
Добавляем универсальности
Создание универсального метода форматирования времени оставляет отпечаток мастерства:
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:
String formattedDuration = DurationFormatUtils.formatDuration(milliseconds, "HH:mm:ss,SSS");
Такой подход также умеет работать с миллисекундами, что идеально подходит для задач, где важна точность до долей секунды.
Проверка полученного результата
Проверьте свой метод на разнообразных данных — это признак качественного кода:
long[] testMillis = {0, 1000, 123450, 3600000, 86399999};
for (long millis : testMillis) {
System.out.println(formatMillisToHHMMSS(millis));
}
Такие тесты помогают убедиться в безупречной работе вашего решения.
Решение на все случаи жизни
Для тех, кто работает со старыми версиями Java, подходит подход с использованием класса SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // Убедитесь, что вы устанавливаете часовой пояс UTC, чтобы избежать неправильного смещения времени.
String formatted = sdf.format(new Date(milliseconds));
Не забывайте устанавливать часовой пояс UTC, чтобы избежать возможных ошибок при смещении времени.
Полезные материалы
- DateFormat (Java Platform SE 8) — официальная документация Java по форматированию даты и времени.
- Java SimpleDateFormat – Java Date Format — гайд по использованию SimpleDateFormat в Java.
- Java – Разница между двумя датами — как верно рассчитать разницу между датами.
- Как преобразовать миллисекунды в "X минут, X секунд" в Java? – Stack Overflow — множество решений для преобразования миллисекунд в понятный формат от сообщества.
- Java67 — уроки и примеры использования форматирования времени в Java.