Tôi làm việc với API DateTime mới của Java 8.
Làm thế nào để chuyển đổi LocalDate thành Instant? Tôi nhận được một ngoại lệ với
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
và tôi không hiểu tại sao.
Tôi làm việc với API DateTime mới của Java 8.
Làm thế nào để chuyển đổi LocalDate thành Instant? Tôi nhận được một ngoại lệ với
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
và tôi không hiểu tại sao.
Câu trả lời:
Các Instant
lớp đại diện cho một điểm tức thời vào thời gian trực tuyến. Chuyển đổi đến và từ một LocalDate
yêu cầu một múi giờ. Không giống như một số thư viện ngày và giờ khác, JSR-310 sẽ không tự động chọn múi giờ cho bạn, vì vậy bạn phải cung cấp múi giờ.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Ví dụ này sử dụng múi giờ mặc định của JVM - ZoneId.systemDefault()
- để thực hiện chuyển đổi. Xem ở đây để có câu trả lời dài hơn cho một câu hỏi liên quan.
Cập nhật: Câu trả lời được chấp nhận sử dụng câu trả lời LocalDateTime::toInstant(ZoneOffset)
chỉ chấp nhận ZoneOffset
. Câu trả lời này sử dụng LocalDate::atStartOfDay(ZoneId)
mà chấp nhận bất kỳ ZoneId
. Như vậy, câu trả lời này thường hữu ích hơn (và có lẽ nên là câu được chấp nhận).
Tái bút. Tôi là tác giả chính của API
Để chuyển đổi nó thành tức thì, bạn cần có một phiên bản LocalDateTime, ví dụ:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
không bao gồm thời gian.