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.