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.
Détails
Les autres réponses utilisent des classes obsolètes ou incorrectes.
Évitez les anciennes classes date-heure telles que java.util.Date/.Calendar. Ils se sont avérés mal conçus, déroutants et gênants.
java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Une grande partie des fonctionnalités est rétroportée vers Java 6 et 7 et adaptée à Android . Fabriqué par les mêmes personnes que Joda-Time .
An Instant
est un moment sur la chronologie en UTC avec une résolution de nanosecondes . Son époque est le premier moment de 1970 en UTC.
En supposant que vos données d'entrée sont un nombre de millisecondes de 1970-01-01T00: 00: 00Z (pas clair dans la question), alors nous pouvons facilement instancier un fichier Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
instant.toString (): 2011-11-23T03: 25: 52.992Z
La chaîne au format ISO 8601Z
dans cette norme est l'abréviation de et signifie UTCZulu
.
Appliquez un fuseau horaire en utilisant un nom de fuseau horaire approprié pour obtenir un fichier ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
Voir ce code exécuté en direct sur IdeOne.com .
Asia/Kolkata
fuseau horaire ?
Je suppose que vous avez un fuseau horaire en Inde affectant votre code. Nous voyons ici que l'ajustement au Asia/Kolkata
fuseau horaire restitue la même heure de la journée que celle que vous signalez, 08:55
soit cinq heures et demie d'avance sur notre valeur UTC 03:25
.
2011-11-23T08: 55: 52.992 + 05: 30 [Asia / Kolkata]
Zone par défaut
Vous pouvez appliquer le fuseau horaire par défaut actuel de la JVM. Attention, la valeur par défaut peut changer à tout moment pendant l'exécution . Tout code dans n'importe quel thread de n'importe quelle application dans la JVM peut changer la valeur par défaut actuelle. Si important, demandez à l'utilisateur le fuseau horaire souhaité / attendu.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Avec un pilote JDBC conforme à JDBC 4.2 ou supérieur, vous pouvez échanger des objets java.time directement avec votre base de données. Pas besoin de chaînes ou de classes java.sql. *.
Où obtenir les classes java.time?
- Java SE 8 , Java SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et Java SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .