A dátum konvertálása LocalDate vagy LocalDateTime és Back formátumra

1. Áttekintés

A Java 8-tól kezdve új Date API-val rendelkezünk: java.time.

Néha azonban még mindig konverziókat kell végrehajtanunk az új és a régi API-k között, és mindkettő dátumábrázolásával kell dolgoznunk.

2. Konvertálás java.util.Dátum nak nek java.time.LocalDate

Kezdjük azzal, hogy a régi dátumábrázolást újra konvertáljuk.

Itt kihasználhatunk egy újatazonnali () módszer, amelyet hozzáadtak a java.util.Dátum a Java 8-ban.

Amikor átalakítunk egy Azonnaliobjektum, akkor a ZoneId mivelAzonnali az objektumok időzónás agnosztikusak - csak pontok az idővonalon.

A atZone (ZoneId zóna) API innen: Azonnali objektum adja vissza a ZonedDateTime, ezért csak ki kell nyernünk LocalDate abból a toLocalDate () módszer.

Először az alapértelmezett rendszert használjuk ZoneId:

public LocalDate convertToLocalDateViaInstant (Date dateToConvert) {return dateToConvert.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDate (); }

És hasonló megoldás, de a Azonnali tárgy - használni a ofEpochMilli () módszer:

public LocalDate convertToLocalDateViaMilisecond (Date dateToConvert) {return Instant.ofEpochMilli (dateToConvert.getTime ()) .atZone (ZoneId.systemDefault ()) .toLocalDate (); }

Mielőtt továbblépnénk, nézzük meg gyorsan a régi java.sql.Date osztály és hogyan lehet ezt átalakítani a-vá LocalDate is.

A Java 8-tól kezdve találhatunk egy kiegészítőt toLocalDate () módszer be java.sql.Date, amely szintén egyszerű módot kínál arra, hogy átalakítsuk java.time.LocalDate.

Ebben az esetben nem kell aggódnunk az időzóna miatt:

public LocalDate convertToLocalDateViaSqlDate (Date dateToConvert) {return new java.sql.Date (dateToConvert.getTime ()). toLocalDate (); }

Nagyon hasonlóan átalakíthatunk egy régit is Dátum objektum a LocalDateTime tárgy is. Nézzük meg ezt a következőt.

3. Konvertálás java.util.Dátum nak nek java.time.LocalDateTime

Ahhoz, hogy a LocalDateTime például hasonlóan használhatjuk közvetítő ZonedDateTime majd használja a toLocalDateTime () API.

Csakúgy, mint korábban, két lehetséges megoldást is felhasználhatunk az Azonnali objektum java.util.Dátum:

public LocalDateTime convertToLocalDateTimeViaInstant (Date dateToConvert) {return dateToConvert.toInstant () .atZone (ZoneId.systemDefault ()) .toLocalDateTime (); } public LocalDateTime convertToLocalDateTimeViaMilisecond (Date dateToConvert) {return Instant.ofEpochMilli (dateToConvert.getTime ()) .atZone (ZoneId.systemDefault ()) .toLocalDateTime (); }

És kezdve a Java 8-tal, mi is használat java.sql.Timestamp megszerezni a LocalDateTime:

ocalDateTime convertToLocalDateTimeViaSqlTimestamp (Date dateToConvert) {return new java.sql.Timestamp (dateToConvert.getTime ()). toLocalDateTime (); }

4. Átalakítás java.time.LocalDate nak nek java.util.Dátum

Most, hogy jól megértettük, hogyan lehet a régi adatábrázolásról az újra konvertálni, nézzük meg a másik irányba történő átalakítást.

Megbeszéljük a konverzió két lehetséges módját LocalDate nak nek Dátum.

Az elsőben egy újat használunk valueOf (LocalDate dátum) pontban megadott módszerjava.sql.Date objektum, ami elveszi LocalDate paraméterként:

public Date convertToDateViaSqlDate (LocalDate dateToConvert) {return java.sql.Date.valueOf (dateToConvert); }

Mint láthatjuk, könnyed és intuitív. Helyi időzónát használ az átalakításhoz (mindez a motorháztető alatt történik, így nem kell aggódnia).

Egy másik Java 8 példában egy Azonnali objektum, amelyet átadunk a (azonnali azonnali)a metódusajava.util.Dátum tárgy:

public Date convertToDateViaInstant (LocalDate dateToConvert) {return java.util.Date.from (dateToConvert.atStartOfDay () .atZone (ZoneId.systemDefault ()) .toInstant ()); }

Figyeljük meg, hogy használunk egy Azonnali tiltakozzon itt, és hogy az átalakítás során az időzónákkal is törődnünk kell.

Ezután használjunk egy nagyon hasonló megoldást a LocalDateTime a Dátum tárgy.

5. Átalakítás java.time.LocalDateTime nak nek java.util.Dátum

A megszerzés legegyszerűbb módja a java.util.Dátum tól től LocalDateTime kiterjesztés használata ajava.sql.Timestamp - Java 8-mal elérhető:

public Date convertToDateViaSqlTimestamp (LocalDateTime dateToConvert) {return java.sql.Timestamp.valueOf (dateToConvert); }

De természetesen alternatív megoldás az an Azonnali tárgy, amelyet megszerzünk ZonedDateTime:

Dátum convertToDateViaInstant (LocalDateTime dateToConvert) {return java.util.Date .from (dateToConvert.atZone (ZoneId.systemDefault ()) .toInstant ()); }

6. Java 9 kiegészítések

A Java 9-ben új módszerek állnak rendelkezésre, amelyek leegyszerűsítik a konverziót java.util.Dátum és java.time.LocalDate vagy java.time.LocalDateTime.

LocalDate.ofInstant (azonnali azonnali, ZoneId zóna) és LocalDateTime.ofInstant (azonnali azonnali, ZoneId zóna) nyújtson praktikus parancsikonokat:

public LocalDate convertToLocalDate (Date dateToConvert) {return LocalDate.ofInstant (dateToConvert.toInstant (), ZoneId.systemDefault ()); } public LocalDateTime convertToLocalDateTime (Date dateToConvert) {return LocalDateTime.ofInstant (dateToConvert.toInstant (), ZoneId.systemDefault ()); }

7. Következtetés

Ebben a cikkben kitértünk a régi konverziójának lehetséges módjaira java.util.Dátum újba java.time.LocalDate és java.time.LocalDateTime, valamint fordítva.

A cikk teljes megvalósítása elérhető a GitHub oldalon.