Konvertering af Java Date til OffsetDateTime

1. Introduktion

I denne vejledning lærer vi om forskellen mellem Dato og OffsetDateTime. Vi lærer også hvordan man konverterer fra den ene til den anden.

2. Forskellen mellem Dato og OffsetDateTime

OffsetDateTime blev introduceret i JDK 8 som et moderne alternativ til java.util.Date.

OffsetDateTime er en trådsikker klasse, der gemmer dato og klokkeslæt med en nøjagtighed på nanosekunder. Datopå den anden side er ikke trådsikker og gemmer tid til millisekunders præcision.

OffsetDateTime er en værdibaseret klasse, hvilket betyder, at vi skal bruge lige med når man sammenligner referencer i stedet for den typiske ==.

Resultatet af OffsetDateTime'S toString metoden er i ISO-8601-format, mens Dato'S toString er i et tilpasset ikke-standardformat.

Lad os ringe toString på begge klasser for at se forskellen:

Dato: Lør 19 okt 17:12:30 2019 Offset Dato Tid: 2019-10-19 T17: 12: 30.174Z

Dato kan ikke gemme tidszoner og tilsvarende forskydninger. Det eneste, der a Dato objektet indeholder er antallet af millisekunder siden 1. januar 1970, 00:00:00 UTC, så hvis vores tid ikke er i UTC, skal vi gemme tidszonen i en hjælperklasse. Tværtimod, OffsetDateTime gemmer ZoneOffset internt.

3. Konvertering Dato til OffsetDateTime

Konvertering Dato til OffsetDateTime er ret simpelt. Hvis vores Dato er i UTC, kan vi konvertere det med et enkelt udtryk:

Dato dato = ny dato (); OffsetDateTime offsetDateTime = date.toInstant () .atOffset (ZoneOffset.UTC);

Hvis originalen Dato ikke er i UTC, kan vi levere offset (gemt i et hjælperobjekt, fordi som tidligere nævnt Date-klasse ikke kan gemme tidszoner).

Lad os sige vores original Dato er +3: 30 (Teheran-tid):

int time = 3; int minut = 30; offsetDateTime = date.toInstant () .atOffset (ZoneOffset.ofHoursMinutes (time, minut));

OffsetDateTime giver mange nyttige metoder, der kan bruges bagefter. For eksempel kan vi bare getDayOfWeek (), getDayOfMonth ()og getDayOfYear (). Det er også meget nemt at sammenligne to OffsetDateTime-objekter med er efter og isFore metoder.

Først og fremmest, det er en god praksis at undgå forældede Dato klasse helt.

4. Konklusion

I denne vejledning lærte vi, hvor enkelt det er at konvertere fra Dato til OffsetDateTime.

Og som altid er koden tilgængelig på Github.