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).
Myślę, że jest to bardziej przydatne niż zaakceptowana odpowiedź, ponieważ ZoneId (strefa czasowa) jest parametrem, a nie ZoneOffset (godziny przesunięte z UTC, które mogą ulec zmianie dla strefy czasowej latem / zimą).
wuerg,
1
W teście jednostkowym, który piszę, mam LocalDate, która jest konwertowana na com.google.protobuf.Timestamp, a następnie odwzorowywana z powrotem na LocalDate za pomocą funkcji Instant, w obie strony. Korzystając z podejścia, które sugeruje zaakceptowana odpowiedź, otrzymuję w zamian oczekiwany LocalDate, ale użycie tego podejścia zwraca „wczoraj” zamiast „dzisiaj”. Moja
strefa
128
Aby przekonwertować go na instant musisz mieć instancję LocalDateTime, np:
LocalDate
nie zawiera czasu.Odpowiedzi:
Instant
Klasa reprezentuje chwilową punkt na linii czasu. Konwersja do iz aLocalDate
wymaga strefy czasowej. W przeciwieństwie do innych bibliotek daty i czasu, JSR-310 nie wybierze strefy czasowej automatycznie, więc musisz ją podać.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 akceptujeZoneOffset
. Ta odpowiedź używa,LocalDate::atStartOfDay(ZoneId)
które akceptuje anyZoneId
. Jako taka, ta odpowiedź jest generalnie bardziej użyteczna (i prawdopodobnie powinna być akceptowana).PS. Byłem głównym autorem API
źródło
Aby przekonwertować go na instant musisz mieć instancję LocalDateTime, np:
źródło