Omzetten tussen java.time.Instant en java.sql.Timestamp

1. Overzicht

Beide java.time.Instant en java.sql.Timestamp klassen vertegenwoordigen een punt op de tijdlijn in UTC. Met andere woorden, ze vertegenwoordigen het aantal nanoseconden sinds het Java-tijdperk.

In deze korte tutorial zullen we de ene naar de andere converteren met behulp van ingebouwde Java-methoden.

2. Converteren Onmiddellijk naar Tijdstempel en terug

We kunnen gebruiken Tijdstempel.from () bekeren Onmiddellijks in tijdstempels:

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

En vice versa kunnen we gebruiken Tijdstempel.toInstant () bekeren Tijdstempels in Onmiddellijks:

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

Hoe dan ook, zowel de Onmiddellijk en Tijdstempel vertegenwoordigt hetzelfde punt op de tijdlijn.

Laten we vervolgens eens kijken naar de interactie tussen de twee klassen en de tijdzone.

3. toString () Methode verschillen

Aanroepen toString () Aan Onmiddellijk en Tijdstempel gedraagt ​​zich anders met betrekking tot de tijdzone.Instant.toString () geeft de tijd terug in UTC-tijdzone. Aan de andere kant, Timezone.toString () geeft de tijd terug in de tijdzone van de lokale machine.

Laten we eens kijken wat we krijgen als we bellen toString () Aan instant en tijdzone respectievelijk:

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

Hier timestamp.toString () resulteerde in een tijd die 5 uur en 30 minuten na de door de instant.toString (). Dit komt doordat de tijdzone van de lokale machine GMT +5: 30 tijdzone is.

De output van de toString () methode is anders, maar zowel de tijdstempel en instant vertegenwoordigen hetzelfde punt op de tijdlijn.

We kunnen dit ook verifiëren door het Tijdstempel naar de UTC-tijdzone:

DateFormat df = DateFormat.getDateTimeInstance (); df = nieuwe SimpleDateFormat ("jjjj-MM-dd'T'HH: mm: ss: SS'Z '"); df.setTimeZone (TimeZone.getTimeZone ("UTC")); assertEquals (instant.toString (), df.format (tijdstempel) .toString ());

4. Conclusie

In deze korte zelfstudie hebben we gezien hoe u kunt converteren tussen java.time.Instant en java.sql.Timestamp klassen in Java met behulp van ingebouwde methoden.

We hebben ook gekeken naar hoe de tijdzone invloed heeft op hoe de uitvoer verandert.

En, zoals altijd, zijn de volledige codevoorbeelden beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found