tl; dr
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
... do fuso horário padrão atual ...
ZonedDateTime.now(
ZoneId.systemDefault()
)
Detalhes
A resposta de Stanislav Bshkyrtsev responde correta e diretamente à sua pergunta.
Mas, há questões maiores envolvidas, como sugerido na resposta de Jon Skeet .
LocalDateTime
Não encontro a maneira de converter epoch second em LocalDateTime
LocalDateTime
propositalmente não tem conceito de fuso horário ou deslocamento em relação ao UTC. Provavelmente não é o que você quer. A Local…
significa qualquer localidade, não qualquer uma localidade particular. Esta classe não representa um momento, apenas momentos potenciais ao longo de uma faixa de cerca de 26-27 horas (a faixa de fusos horários ao redor do globo).
Instant
Não há necessidade de começar com segundos de época se você estiver tentando obter a hora atual. Obtenha a corrente Instant
. A Instant
classe representa um momento na linha do tempo em UTC com uma resolução de nanossegundos (até nove (9) dígitos de uma fração decimal).
Instant instant = Instant.now();
Dentro disso, Instant
há uma contagem de nanossegundos desde a época. Mas nós realmente não nos importamos.
ZonedDateTime
Se você quiser ver aquele momento através das lentes do relógio de parede de uma região em particular, aplique a ZoneId
para obter a ZonedDateTime
.
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
Como um atalho, você pode fazer diretamente para o ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.now( z );
A ZonedDateTime
tem um Instant
dentro dele. Ligue zdt.toInstant()
para obter o mesmo momento no tempo que um valor básico em UTC . Mesmo número de nanossegundos desde a época de qualquer maneira, como a ZonedDateTime
ou como a Instant
.
Segundos desde a época fornecidos
Se você receber uma contagem de segundos desde a época, e a época for o primeiro momento de 1970 em UTC ( 1970-01-01T00:00:00Z
), passe esse número para Instant
.
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
Sobre java.time
A estrutura java.time é construída em Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como java.util.Date
, Calendar
, e SimpleDateFormat
.
Para saber mais, consulte o Tutorial Oracle . E pesquise no Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .
Você pode trocar objetos java.time diretamente com seu banco de dados. Use um driver JDBC compatível com JDBC 4.2 ou posterior. Não há necessidade de cordas, não há necessidade de java.sql.*
classes.
Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval
, YearWeek
, YearQuarter
, e mais .
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
funcionar? É umunexpected token
para mim em Java 11.