tl; dr
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
... del fuso orario predefinito corrente ...
ZonedDateTime.now(
ZoneId.systemDefault()
)
Dettagli
La risposta di Stanislav Bshkyrtsev risponde correttamente e direttamente alla tua domanda.
Ma ci sono problemi più grandi coinvolti, come suggerito nella risposta di Jon Skeet .
LocalDateTime
Non trovo il modo per convertire epoch second in LocalDateTime
LocalDateTime
intenzionalmente non ha il concetto di fuso orario o offset da UTC. Probabilmente non è quello che vuoi. La Local…
significa qualsiasi frazione, non una qualsiasi località particolare. Questa classe lo fa non rappresenta un momento, ma solo potenziali momenti lungo un intervallo di circa 26-27 ore (l'intervallo di fusi orari in tutto il mondo).
Instant
Non è necessario iniziare con epoche secondi se stai cercando di ottenere l'ora corrente. Ottieni la corrente Instant
. La Instant
classe rappresenta un momento sulla sequenza temporale in UTC con una risoluzione di nanosecondi (fino a nove (9) cifre di una frazione decimale).
Instant instant = Instant.now();
All'interno di quello Instant
c'è un conteggio di nanosecondi , dall'epoca. Ma non ci interessa davvero.
ZonedDateTime
Se vuoi vedere quel momento attraverso la lente dell'orologio da parete di una particolare regione, applica un ZoneId
per ottenere un ZonedDateTime
.
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
Come scorciatoia, puoi fare direttamente al file ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.now( z );
A ZonedDateTime
ha un al Instant
suo interno. Chiama zdt.toInstant()
per ottenere lo stesso momento nel tempo come valore di base in UTC . Stesso numero di nanosecondi dall'epoca in entrambi i casi, come ZonedDateTime
ao come a Instant
.
Secondi dall'epoca dati
Se ti viene dato un conteggio dei secondi dall'epoca e l'epoca è il primo momento del 1970 in UTC ( 1970-01-01T00:00:00Z
), inserisci quel numero a Instant
.
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
Di java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantano le fastidiose vecchie classi data-ora legacy come java.util.Date
,Calendar
, e SimpleDateFormat
.
Per saperne di più, vedere il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione alle classi java.time .
Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizza un driver JDBC compatibile con JDBC 4.2 o successivo. Non c'è bisogno di stringhe, non c'è bisogno di java.sql.*
classi.
Dove ottenere le classi java.time?
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
? Èunexpected token
per me in Java 11.