ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку
logo

Преобразование эпохи в миллисекундах в LocalDate в Java 8

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

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

Если желаете конвертировать миллисекунды времени Epoch в LocalDate в Java 8, следуйте инструкциям ниже:

  1. Инициализируйте объект Instant с использованием метода Instant.ofEpochMilli(), подав на вход миллисекунды.
  2. Преобразуйте Instant в объект ZonedDateTime, задав временную зону методом atZone().
  3. Извлеките LocalDate, активировав метод toLocalDate(). Вот корректный пример кода:
Java
Скопировать код
LocalDate date = Instant.ofEpochMilli(epochMillis).atZone(ZoneId.systemDefault()).toLocalDate();

С использованием этого метода вы сможете получить объект LocalDate, представляющий дату в системной временной зоне на основании заданного количества миллисекунд времени Epoch.

Подробное объяснение и советы

Работая с датами и временем в Java, очень важно обращать внимание на часовые пояса и разбираться в различиях между разными типами даты и времени.

Варианты обращения с часовыми поясами

Опираясь на ZoneId.systemDefault(), вы ориентируетесь на системный часовой пояс. Учтите, что:

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

Когда может потребоваться LocalDateTime

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

Различия между LocalDate и java.util.Date

Не путайте LocalDate с классом java.util.Date. LocalDate – это часть нового API для работы с датой и временем, введённого в Java 8. Он предназначен для использования только с датами. В свою очередь java.util.Date используется в старом API и предназначен для работы с датами, временем, а также временными зонами.

Определение числа дней с начала Эпохи Unix

Для определения количества дней с начала эпохи Unix используйте метод Duration.ofMillis(epochMillis).toDays(). Заметьте, что результат будет представлен в виде длительности, а не в виде LocalDate.

Преобразование Timestamp в LocalDateTime

Если у вас есть объект Timestamp, то для получения LocalDateTime воспользуйтесь следующим кодом:

Java
Скопировать код
LocalDateTime dateTime = new Timestamp(epochMillis).toLocalDateTime();

Так вы сможете конвертировать миллисекунды времени Epoch в объект LocalDateTime.

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

Markdown
Скопировать код
Миллисекунды времени Epoch: 1609502400000L

Этапы преобразования:
1. Создание объекта Instant: Instant.ofEpochMilli()         // "Мгновение времени"
2. Задание часового пояса: atZone(ZoneId.systemDefault()) // "Зона по умолчанию"
3. Получение LocalDate: toLocalDate()                        // "Только дата, без времени"

Результат: LocalDate 2021-01-01

Пошагово конвертируем миллисекунды времени Epoch в LocalDate.

Дополнительные указания и меры предосторожности

Учёт часового пояса при преобразовании

Для более точного контроля выборки используйте конкретный ZoneId вместо системного по умолчанию:

Java
Скопировать код
LocalDate date = Instant.ofEpochMilli(epochMillis).atZone(ZoneId.of("UTC")).toLocalDate();

Преобразование миллисекунд из времени Epoch без учета часового пояса

Если требуется непосредственное преобразование миллисекунд из времени Epoch в LocalDate без учёта временной зоны:

Java
Скопировать код
LocalDate epochDay = LocalDate.ofEpochDay(TimeUnit.MILLISECONDS.toDays(epochMillis));

При этом часовой пояс не будет учтён.

Особенности учета летнего времени и секунд

Будьте внимательны к особенностям использования летнего времени и каскадного изменения секунд. Правильный выбор ZoneId поможет корректно учитывать эти аспекты.

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

  1. java.time (Java SE 8) — Подробное руководство по API даты и времени Java 8.
  2. LocalDate (Java SE 8) — Детали класса LocalDate.
  3. Конвертер Epoch – Конвертер Unix Timestamp — Полезный инструмент для конвертации временных меток Epoch.
  4. Введение в Date/Time API Java 8 | Baeldung — Подробное руководство по использованию Date и Time API в Java 8.
  5. ZoneId (Java SE 8) — Руководство по работе с временными зонами.
  6. Instant (Java SE 8) — Описание работы с классом Instant и его синхронизации с временными отметками.