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.