Преобразование Unix timestamp в Date: Java решение
Быстрый ответ
Чтобы преобразовать Unix timestamp в объект Date
в Java, используйте следующий код: new Date(unixTimestamp * 1000L)
. В этом случае происходит перевод секунд в миллисекунды.
Date date = new Date(1633072800L * 1000L);
Узнаем больше о классах java.util.Date
и java.time
Работать с датами и временем в Java можно двумя основными способами: с помощью проверенного временем класса java.util.Date
и современного пакета java.time
, введенного в версии Java 8.
Подробнее о классе java.util.Date
Класс java.util.Date
давно знаком любому разработчику на Java. Интерфейсы по всему миру используют его для представления момента времени с точностью до миллисекунд:
long unixTimestampInSeconds = 1633072800L;
// Познакомимся с Unix timestamp
Date legacyDate = new Date(unixTimestampInSeconds * 1000L);
Если вам уже известно значение временной метки в миллисекундах, преобразование не требуется:
long unixTimestampInMilliseconds = 1633072800000L;
Date legacyDateFromMillis = new Date(unixTimestampInMilliseconds); // Просто и элегантно!
При работе с Date
важно учитывать часовые пояса и форматирование. Для этих целей можно использовать SimpleDateFormat
, чтобы отформатировать дату по своему усмотрению:
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String formattedDate = sdf.format(legacyDate); // Прекрасно отформатированная дата!
Используем актуальный пакет java.time
С появлением API java.time
, реализующего стандарт JSR-310, Java сумела добиться значительного прогресса. Если вы используете Java 8 или более новую версию, предпочтение следует отдать пакету java.time
:
Instant instant = Instant.ofEpochSecond(unixTimestampInSeconds);
Date modernDate = Date.from(instant); // Путешествие во времени на скорости Java!
Для тонкой работы с часовыми поясами великолепно подходит ZonedDateTime
:
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = instant.atZone(zoneId);
Instant
удобно преобразовывать в другие типы, например в LocalDateTime
, что делает его незаменимым инструментом:
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
Визуализация
Считайте Unix timestamp шифром 🕵️, а объект Java Date ключом к его расшифровке:
Unix Timestamp (🕒): 1633072800
Расшифровка:
// 🕵️♀️ Расшифровываем загадочное послание
Date date = new Date(1633072800L * 1000);
И в итоге получаем:
Java Date Object (📅): "Tue, 01 Oct 2021 00:00:00 GMT"
// Тайна отгадана! 🎉
Будьте бдительны и учитывайте совместимость: как справиться со сложными случаями
Перебирая временные метки и даты, стоит быть настороже и представлять все возможные нюансы, особенно при работе с нестандартными случаями и соблюдении совместимости.
Если UNIX представлен в виде строки
Иногда Unix timestamp записывают в виде строки. Не забывайте об способе преобразования строки в числовой формат перед конвертацией:
String unixTimestampString = "1633072800";
long unixTimestamp = Long.parseLong(unixTimestampString); // Преобразовываем строку в число
Date parsedDate = new Date(unixTimestamp * 1000L); // Получаем готовую к использованию дату!
Путешествие сквозь часовые пояса
Верное обращение с часовыми поясами обеспечивает точное время в любом уголке земного шара:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTimeInMillis(unixTimestamp * 1000L);
Date utcDate = calendar.getTime(); // Часовые пояса больше не страшны!
Мост между прошлым и настоящим
Гладкий переход между java.util.Date
и java.time
важен при взаимодействии со старым и новым кодом:
// Преобразование из java.time.Instant в java.util.Date
Instant instant = Instant.ofEpochSecond(unixTimestamp);
Date convertedDate = Date.from(instant); // Быстро и удобно!
// Преобразование из java.util.Date в java.time.Instant
Instant convertedInstant = convertedDate.toInstant(); // И обратно, без сложностей!
Не бойтесь экспериментировать с библиотекой ThreeTen-Extra
Если вам требуется более глубокое взаимодействие с датами и временем, чем то, что предоставляет стандартный java.time
, воспользуйтесь возможностями библиотеки ThreeTen-Extra:
// Сложные задачи? Нет проблем!
Period tenDays = Period.ofDays(10);
Углубляясь в мир работы с датами и временем, не забывайте о множестве утилит, созданных для поддержки ваших запросов.
Полезные материалы
- java.time (Java Platform SE 8) — Официальная документация Java по классам Date и Time.
- Epoch Converter – Unix Timestamp Converter — Инструмент для работы с Unix timestamps и понимания времени Epoch.
- Instant (Java Platform SE 8) — Всё, что нужно знать об Instant, включая методы работы с временными метками.
- Getting "unixtime" in Java – Stack Overflow — Обсуждения сообщества о преобразовании Unix времени в объекты Java Date.
- SimpleDateFormat (Java Platform SE 7) — Инструкция по использованию SimpleDateFormat.
- Joda-Time – Home — Joda-Time для тех, кто ищет баланс между старым и новым.
- DateTimeFormatter (Java Platform SE 8) — Правила работы с DateTimeFormatter для форматирования и анализа дат в Java 8.