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:
InstantKlasa reprezentuje chwilową punkt na linii czasu. Konwersja do iz a LocalDatewymaga 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)
LocalDatenie zawiera czasu.