tl; dr
Instant.ofEpochMilli( 1_322_018_752_992L ) // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.
Dettagli
Le altre risposte utilizzano classi obsolete o errate.
Evita le vecchie classi di data e ora come java.util.Date/.Calendar. Hanno dimostrato di essere mal progettati, confusi e problematici.
java.time
Il framework java.time è integrato in Java 8 e versioni successive. Gran parte delle funzionalità sono backportate su Java 6 e 7 e ulteriormente adattate ad Android . Realizzato da alcune delle stesse persone che avevano creato Joda-Time .
An Instant
è un momento sulla linea temporale in UTC con una risoluzione di nanosecondi . La sua epoca è il primo momento del 1970 in UTC.
Supponendo che i tuoi dati di input siano conteggiati in millisecondi dal 1970-01-01T00: 00: 00Z (non chiaro nella Domanda), allora possiamo facilmente istanziare un Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
instant.toString (): 2011-11-23T03: 25: 52.992Z
Il Z
in questo standard ISO 8601 stringa formattata è l'abbreviazione di Zulu
e mezzi UTC .
Applicare un fuso orario usando un nome di fuso orario appropriato , per ottenere un ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
Vedi questo codice eseguito dal vivo su IdeOne.com .
Asia/Kolkata
fuso orario ?
Immagino che il tuo codice abbia un fuso orario in India. Vediamo qui che l'adattamento al Asia/Kolkata
fuso orario rende la stessa ora del giorno indicata per il rapporto, 08:55
che è di cinque ore e mezza in anticipo rispetto al nostro valore UTC 03:25
.
2011-11-23T08: 55: 52,992 + 05: 30 [Asia / Kolkata]
Zona predefinita
È possibile applicare il fuso orario predefinito corrente della JVM. Attenzione che l'impostazione predefinita può cambiare in qualsiasi momento durante il runtime . Qualsiasi codice in qualsiasi thread di qualsiasi app all'interno della JVM può modificare l'impostazione predefinita corrente. Se importante, chiedi all'utente il fuso orario desiderato / previsto.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Informazioni su java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione a java.time classi .
Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Con un driver JDBC conforme a JDBC 4.2 o versione successiva, è possibile scambiare oggetti java.time direttamente con il database. Non sono necessarie stringhe o classi java.sql. *.
Dove ottenere le classi java.time?
- Java SE 8 , Java SE 9 e versioni successive
- Built-in.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e Java SE 7
- Gran parte della funzionalità java.time è trasferita su Java 6 e 7 in ThreeTen-Backport .
- androide
- Versioni successive di implementazioni di bundle Android delle classi java.time.
- Per precedenza Android, il ThreeTenABP progetto si adatta ThreeTen-Backport (di cui sopra). Vedi Come usare ThreeTenABP… .
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .