Converter entre java.time.Instant e java.sql.Timestamp
1. Visão geral
Ambas as classesjava.time.Instantejava.sql.Timestamp representam um ponto na linha do tempo em UTC. Em outras palavras, eles representam o número de nanossegundos desdethe Java epoch.
Neste tutorial rápido, vamos converter um para o outro usando métodos Java integrados.
2. ConvertendoInstant emTimestamp e de volta
Podemos usarTimestamp.from() para converterInstants em carimbos de data / hora:
Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
assertEquals(instant.toEpochMilli(), timestamp.getTime());
E vice-versa, podemos usarTimestamp.toInstant() para converterTimestamps emInstants: __
instant = timestamp.toInstant();
assertEquals(instant.toEpochMilli(), timestamp.getTime());
De qualquer forma,Instant eTimestamp representam o mesmo ponto na linha do tempo.
A seguir, vamos dar uma olhada na interação entre as duas classes e o fuso horário.
3. toString() Diferenças de método
Invoking toString() on Instant and Timestamp behaves differently with respect to timezone.Instant.toString() retorna a hora no fuso horário UTC. Por outro lado,Timezone.toString() retorna a hora no fuso horário da máquina local.
Vamos ver o que obtemos ao chamartoString() eminstantetimezone, respectivamente:
Instant (in UTC): 2018-10-18T00:00:57.907Z
Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907
Here, timestamp.toString() resultou em um tempo que é 5 horas e 30 minutos após o tempo retornado porinstant.toString().. Isso ocorre porque o fuso horário da máquina local está no fuso horário GMT +5: 30.
The output of the toString() method is different, but both the timestamp and instant represent the same point on the timeline.
Também podemos verificar isso convertendoTimestamp para o fuso horário 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. Conclusão
Neste tutorial rápido, vimos como converter entre as classesjava.time.Instantejava.sql.Timestamp em Java usando métodos integrados.
Também vimos como o fuso horário afeta como a saída é alterada.
E, como sempre, os exemplos de código completos estão disponíveisover on GitHub.