convertir entre java.time.Instant et java.sql.Timestamp

Convertir entre java.time.Instant et java.sql.Timestamp

1. Vue d'ensemble

Les classesjava.time.Instant etjava.sql.Timestamp représentent un point sur la chronologie en UTC. En d'autres termes, ils représentent le nombre de nanosecondes depuisthe Java epoch.

Dans ce rapide didacticiel, nous allons convertir l'un en l'autre à l'aide des méthodes Java intégrées.

2. Conversion deInstant enTimestamp et retour

Nous pouvons utiliserTimestamp.from() pour convertirInstants en horodatages:

Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
assertEquals(instant.toEpochMilli(), timestamp.getTime());

Et vice-versa, nous pouvons utiliserTimestamp.toInstant() pour convertirTimestamps enInstants: __

instant = timestamp.toInstant();
assertEquals(instant.toEpochMilli(), timestamp.getTime());

Dans tous les cas, lesInstant etTimestamp représentent le même point sur la chronologie.

Voyons ensuite l'interaction entre les deux classes et le fuseau horaire.

3. toString() Différences de méthode

Invoking toString() on Instant and Timestamp behaves differently with respect to timezone.Instant.toString() renvoie l'heure au fuseau horaire UTC. D'autre part,Timezone.toString() renvoie l'heure dans le fuseau horaire de la machine locale.

Voyons ce que nous obtenons en appelanttoString() surinstant ettimezone respectivement:

Instant (in UTC): 2018-10-18T00:00:57.907Z
Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907

Here, timestamp.toString() a donné une heure qui est de 5 heures 30 minutes après l'heure renvoyée par lesinstant.toString(). Cela est dû au fait que le fuseau horaire de la machine locale est au fuseau horaire GMT +5: 30.

The output of the toString() method is different, but both the timestamp and instant represent the same point on the timeline.

Nous pouvons également le vérifier en convertissant lesTimestamp en fuseau horaire UTC:

DateFormat df = DateFormat.getDateTimeInstance();
df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'");
df.setTimeZone(TimeZone.getTimeZone("UTC"));

assertEquals(instant.toString(), df.format(timestamp).toString());

4. Conclusion

Dans ce tutoriel rapide, nous avons vu comment convertir entre les classesjava.time.Instant etjava.sql.Timestamp en Java à l'aide de méthodes intégrées.

Nous avons également examiné l'incidence du fuseau horaire sur les modifications de la sortie.

Et, comme toujours, les exemples de code complets sont disponiblesover on GitHub.