A Instantclasse representa um ponto instantâneo na linha do tempo. A conversão de e para um LocalDaterequer 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).
Acho que isso é mais útil do que a resposta aceita, já que ZoneId (fuso horário) é o parâmetro e não ZoneOffset (horas alteradas do UTC, que pode mudar para um fuso horário no verão / inverno).
wuerg
1
Em um teste de unidade que estou escrevendo, tenho um LocalDate, que é convertido em com.google.protobuf.Timestamp e, em seguida, mapeado de volta para um LocalDate por meio de um Instant, nos dois sentidos. Ao usar a abordagem que a resposta aceita sugere, obtenho o LocalDate esperado em troca, mas usar essa abordagem me dá "ontem" de volta em vez de "hoje". Meu fuso horário é GMT + 1
Nadrendion
127
Para convertê-lo em um instante, você precisa ter uma instância LocalDateTime, por exemplo:
LocalDate
não inclui um tempo.Respostas:
A
Instant
classe representa um ponto instantâneo na linha do tempo. A conversão de e para umLocalDate
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.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ó aceitaZoneOffset
. Esta resposta usaLocalDate::atStartOfDay(ZoneId)
qual aceita qualquerZoneId
. Como tal, esta resposta é geralmente mais útil (e provavelmente deve ser a aceita).PS. Eu fui o principal autor da API
fonte
Para convertê-lo em um instante, você precisa ter uma instância LocalDateTime, por exemplo:
fonte