Pracuję z nowym API DateTime w Javie 8.
Jak przekonwertować LocalDate na Instant? Mam wyjątek z
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
i nie rozumiem dlaczego.
Pracuję z nowym API DateTime w Javie 8.
Jak przekonwertować LocalDate na Instant? Mam wyjątek z
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
i nie rozumiem dlaczego.
Odpowiedzi:
Instant
Klasa reprezentuje chwilową punkt na linii czasu. Konwersja do iz a LocalDate
wymaga strefy czasowej. W przeciwieństwie do innych bibliotek daty i czasu, JSR-310 nie wybierze strefy czasowej automatycznie, więc musisz ją podać.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
W tym przykładzie ZoneId.systemDefault()
do wykonania konwersji użyto domyślnej strefy czasowej maszyny JVM - -. Zobacz tutaj, aby uzyskać dłuższą odpowiedź na powiązane pytanie.
Aktualizacja: Zaakceptowana odpowiedź używa LocalDateTime::toInstant(ZoneOffset)
tylko akceptuje ZoneOffset
. Ta odpowiedź używa, LocalDate::atStartOfDay(ZoneId)
które akceptuje any ZoneId
. Jako taka, ta odpowiedź jest generalnie bardziej użyteczna (i prawdopodobnie powinna być akceptowana).
PS. Byłem głównym autorem API
Aby przekonwertować go na instant musisz mieć instancję LocalDateTime, np:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
nie zawiera czasu.