Eu trabalho com a nova API DateTime do Java 8.
Como converter um LocalDate em um Instant? Eu recebo uma exceção com
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
e eu não entendo por quê.
Eu trabalho com a nova API DateTime do Java 8.
Como converter um LocalDate em um Instant? Eu recebo uma exceção com
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
e eu não entendo por quê.
Respostas:
A Instant
classe representa um ponto instantâneo na linha do tempo. A conversão de e para um LocalDate
requer um fuso horário. Ao contrário de algumas outras bibliotecas de data e hora, JSR-310 não selecionará o fuso horário para você automaticamente, portanto, você deve fornecê-lo.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Este exemplo usa o fuso horário padrão da JVM - ZoneId.systemDefault()
- para realizar a conversão. Veja aqui uma resposta mais longa a uma pergunta relacionada.
Atualização: A resposta aceita usa LocalDateTime::toInstant(ZoneOffset)
que só aceita ZoneOffset
. Esta resposta usa LocalDate::atStartOfDay(ZoneId)
qual aceita qualquer ZoneId
. Como tal, esta resposta é geralmente mais útil (e provavelmente deve ser a aceita).
PS. Eu fui o principal autor da API
Para convertê-lo em um instante, você precisa ter uma instância LocalDateTime, por exemplo:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
não inclui um tempo.