Konvertering av Java Date til OffsetDateTime

1. Introduksjon

I denne opplæringen lærer vi om forskjellen mellom Dato og OffsetDateTime. Vi lærer også hvordan konvertere fra den ene til den andre.

2. Forskjellen mellom Dato og OffsetDateTime

OffsetDateTime ble introdusert i JDK 8 som et moderne alternativ til java.util.Date.

OffsetDateTime er en trådsikker klasse som lagrer dato og tid til en presisjon på nanosekunder. Datoderimot, er ikke trådsikker og lagrer tid til millisekunders presisjon.

OffsetDateTime er en verdibasert klasse, noe som betyr at vi trenger å bruke er lik når man sammenligner referanser i stedet for den typiske ==.

Produksjonen av OffsetDateTime‘S toString metoden er i ISO-8601-format, mens Dato‘S toString er i et tilpasset ikke-standard format.

La oss ringe toString på begge klassene for å se forskjellen:

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

Dato kan ikke lagre tidssoner og tilsvarende forskyvninger. Det eneste som a Dato objektet inneholder er antall millisekunder siden 1. januar 1970, 00:00:00 UTC, så hvis tiden vår ikke er i UTC, bør vi lagre tidssonen i en hjelperklasse. Tvert imot, OffsetDateTime lagrer ZoneOffset internt.

3. Konvertering Dato til OffsetDateTime

Konvertering Dato til OffsetDateTime er ganske enkelt. Hvis vår Dato er i UTC, kan vi konvertere det med et enkelt uttrykk:

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

Hvis originalen Dato ikke er i UTC, kan vi gi forskyvningen (lagret i et hjelperobjekt, fordi som nevnt tidligere ikke Dataklasse kan lagre tidssoner).

La oss si originalen vår Dato er +3: 30 (Teheran-tid):

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

OffsetDateTime gir mange nyttige metoder som kan brukes etterpå. For eksempel kan vi bare getDayOfWeek (), getDayOfMonth (), og getDayOfYear (). Det er også veldig enkelt å sammenligne to OffsetDateTime-objekter med er etter og isFore metoder.

Fremfor alt det er en god praksis å unngå forældede Dato klasse helt.

4. Konklusjon

I denne opplæringen lærte vi hvor enkelt det er å konvertere fra Dato til OffsetDateTime.

Og som alltid er koden tilgjengelig på Github.


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