Я працюю з новим API API DateTime Java 8.
Як перетворити LocalDate в миттєвий? Я отримую виняток із
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
і я не розумію, чому.
Я працюю з новим API API DateTime Java 8.
Як перетворити LocalDate в миттєвий? Я отримую виняток із
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
і я не розумію, чому.
Відповіді:
Instant
Клас являє собою миттєву точку на тимчасової лінії. Для перетворення в та з нього LocalDate
потрібен часовий пояс. На відміну від деяких інших бібліотек дат і часу, JSR-310 не вибере часовий пояс для вас автоматично, тому ви повинні надати його.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
У цьому прикладі використовується часовий пояс за замовчуванням JVM - ZoneId.systemDefault()
- для здійснення перетворення. Дивіться тут, щоб отримати більш довгу відповідь на пов'язане питання.
Оновлення: прийнята відповідь використовує те, LocalDateTime::toInstant(ZoneOffset)
що лише приймає ZoneOffset
. У цій відповіді використовується те, LocalDate::atStartOfDay(ZoneId)
що приймає будь-яке ZoneId
. Ця відповідь, як правило, є більш корисною (і, мабуть, повинна бути прийнятою).
PS. Я був головним автором API
Щоб перетворити його на мить, вам потрібно мати екземпляр LocalDateTime, наприклад:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
що не включає час.