Különbségek a ZonedDateTime és az OffsetDateTime között

1. Áttekintés

ZonedDateTime és OffsetDateTime elég népszerű osztályok a Java 8-ban Dátum idő API. Továbbá, mindkettő egy pillanatot tárol az idővonalon nanoszekundumok pontosságáig. Eleinte zavaros lehet, ha választanak közöttük.

Ebben a gyors bemutatóban megvizsgáljuk a különbségeket ZonedDateTime és OffsetDateTime.

2. ZonedDateTime

A ZonedDateTime a dátum-idő változhatatlan ábrázolása időzónával az ISO-8601 naptárrendszerben, mint pl 2007-12-03T10: 15: 30 + 01: 00 Európa / Paris. Három különálló objektumnak megfelelő állapotot tartalmaz: a LocalDateTime, a ZoneId, és a megoldott ZoneOffset.

Itt a ZoneId meghatározza, hogy az eltolás hogyan és mikor változik. Tehát az eltolás nem állítható be szabadon, mivel a zóna szabályozza, hogy mely eltolások érvényesek.

Ahhoz, hogy megkapja az áramot ZonedDateTime egy adott régió esetében a következőket fogjuk használni:

ZoneId zone = ZoneId.of ("Európa / Berlin"); ZonedDateTime zonedDateTime = ZonedDateTime.now (zóna);

A ZonedDateTime osztály beépített módszereket is kínál az adott dátum egyik időzónáról a másikra konvertálására:

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

Végül az teljesen DST-tudatos és kezeli a nyári időszámítás beállításait. Gyakran hasznos, ha egy dátum-idő mezőt egy adott időzónában szeretnénk megjeleníteni.

3. OffsetDateTime

An OffsetDateTime a dátum és idő változhatatlan ábrázolása az UTC / Greenwich eltolódásával az ISO-8601 naptárrendszerben, mint pl. 2007-12-03T10: 15: 30 + 01: 00. Más szavakkal, tároljaaz összes dátum- és időmező, nanoszekundum pontossággal, valamint a GMT / UTC szerinti eltolás.

Szerezzük meg az áramot OffsetDateTime két órás GMT / UTC eltolással:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); OffsetDateTime offsetDateTime = OffsetDateTime.now (zoneOffSet);

4. A fő különbségek

Először is nincs értelme (konverziók nélkül) két dátumot közvetlenül összehasonlítani a teljes időzóna információval. Ebből kifolyólag, mindig inkább a tárolást részesítsük előnyben OffsetDateTime az adatbázisban a ZonedDateTime, mivel a helyi időeltolással rendelkező dátumok mindig ugyanazokat a pillanatokat képviselik időben.

Sőt, ellentétben a ZonedDateTime, hozzáadva egy indexet a OffsetDateTime nem változtatja meg a dátum jelentését.

Gyorsan foglaljuk össze a legfontosabb különbségeket.

ZonedDateTime:

  • eltárolja az összes dátum- és időmezőt nanoszekundum pontossággal és egy időzónát, zónaeltolással a kétértelmű helyi dátum-idő kezelésére
  • nem lehet szabadon eltolni az eltolásokat, mivel a zóna az érvényes eltolási értékeket vezérli
  • teljesen DST-tudatos és kezeli a nyári időszámítás kiigazítását
  • jól jön a dátum-idő mezők felhasználóspecifikus időzónában történő megjelenítéséhez

OffsetDateTime:

  • tárolja az összes dátum- és időmezőt nanoszekundum pontossággal, valamint a GMT / UTC-eltolást (nincs időzóna információ)
  • kell használni egy dátum tárolására az adatbázisban vagy a hálózaton keresztüli kommunikációra

5. Következtetés

Ebben az oktatóanyagban a ZonedDateTime és a OffsetDateTime.

Szokás szerint a teljes forráskód elérhető a Githubon.