Преобразование миллисекунд в форматированное время в Java
Быстрый ответ
Чтобы преобразовать временные метки из миллисекунд в форматированную дату и время на Java, применяется SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String время в форматированном виде = sdf.format(new Date(System.currentTimeMillis()));
System.out.println(время в форматированном виде); // Вывод: "2023-01-28 13:45:30"
С помощью класса SimpleDateFormat
можно применить шаблон форматирования к объекту Date
, полученному из текущего времени в миллисекундах.
Применение шаблонов SimpleDateFormat
SimpleDateFormat
использует определенные символы шаблона для форматирования даты и времени. Вот краткий справочник символов:
yyyy
: Год.MM
: Месяц.dd
: День.HH
: Часы в 24-часовом формате.mm
: Минуты.ss
: Секунды.SSS
: Миллисекунды (несмотря на то, что их не просто заметить).
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // Крайне рекомендуется для однозначности!
Установка часового пояса UTC позволяет устранить различия, вызванные локализацией и переходом на летнее время.
Переход к java.time (с Java 8)
С момента выпуска Java 8 стало предпочтительнее использовать пакет java.time
. Вот обновленный способ:
Instant instant = Instant.ofEpochMilli(System.currentTimeMillis());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC"));
String время в форматированном виде = formatter.format(instant);
System.out.println(время в форматированном виде); // Вывод: "2023-01-28 13:45:30" – Возможно ли путешествие во времени?
DateTimeFormatter
поддерживает неизменяемость и обеспечивает безопасность в многопоточном режиме.
Визуализация
Преобразуем сложно воспринимаемые цифровые метки времени в миллисекундах в понятный каждому язык:
Загадочные числовые коды (👽📜): 1619208000000
Используем SimpleDateFormat
в роли переводчика:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String времяЗемли = sdf.format(new Date(1619208000000L));
И получаем временную метку, понятную любому землянину 🌍:
Часы Земли (🌍🕓): "16:00:00"
Учет исключений и специальных случаев
Форматирование временных меток – это задача, в которой есть свои сложности. Аргументы могут быть некорректны, уходить за пределы диапазона, часовые пояса могут вносить свои коррективы. Чтобы избежать проблем:
- Проверяйте входные данные на правильность.
- Внимательно относитесь к крайним значениям и ограничениям используемых API.
- Корректно обрабатывайте часовые пояса, особенно в случае создания международных приложений.
Не забывайте о блоке try-catch
для обработки исключений.
Оптимизация производительности и изучение альтернатив
Для повышения производительности рекомендуется повторное использование объектов Date
и SimpleDateFormat
, что приводит к уменьшению нагрузки на сборщик мусора.
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // Ведь это международный стандарт!
Если вы хотите использовать сторонние библиотеки, Joda-Time или Apache Commons Lang предлагают более удобные инструменты для работы со временем.
String formattedDuration = DurationFormatUtils.formatDurationHMS(timeMillis);
System.out.println(formattedDuration); // Вывод: "1:23:45.678", каждая миллисекунда важна!
Полезные материалы
- java.time (Java SE 8) — базовый документ для работы с датами и временем.
- SimpleDateFormat (Java SE 7) — руководство по
SimpleDateFormat
в Java 7. - Java SimpleDateFormat – Форматирование даты Java — подробное руководство по форматированию времени на Java.
- Обсуждаем время — введение в новую эру Date/Time API Java 8.
- Будьте настороже! | Cloudflare — подборка наиболее полезных примеров работы с
SimpleDateFormat
. - Понимание даты и времени в Java SE 8 — блог Oracle, объясняющий работу с датами и временем в Java SE 8.