ZoneOffset Java-ban

1. Bemutatkozás

Világunkban minden ország egy bizonyos időzónát követ. Ezek az időzónák kulcsfontosságúak az idő kényelmes és hatékony kifejezéséhez. Az időzónák azonban néha nem egyértelműek lehetnek olyan változók miatt, mint például a nyári időszámítás, a képbe kerülés.

Sőt, bár a kódban ezeket az időzónákat képviseli, a dolgok zavarosakká válhatnak. A Java több osztályt biztosított, mint pl Dátum, Idő és Dátum idő a múltban az időzónákról is gondoskodni kellett.

Az új Java verziók azonban hasznosabb és kifejezőbb osztályokkal álltak elő, mint pl ZoneId és ZoneOffset, az időzónák kezeléséhez.

Ebben a cikkben, megbeszéljük ZoneId és ZoneOffset valamint kapcsolódó Dátum idő osztályok.

Olvashatunk az új készletről is Dátum idő osztályok bevezetése a Java 8-ban, előző bejegyzésünkben.

2. ZoneId és ZoneOffset

A JSR-310 megjelenésével néhány hasznos API-val bővült a dátum, az idő és az időzónák kezelése. ZoneId és ZoneOffset osztályokat is hozzáadták a frissítés részeként.

2.1. ZoneId

Ahogy a fentiekben írják, ZoneId az időzóna ábrázolása mint például 'Európa / Párizs‘.

2 megvalósítása van ZoneId. Először, fix eltolással a GMT / UTC-hez képest. Másodszor, mint földrajzi régió, amelynek szabályrendszere van az eltolás GMT / UTC-vel történő kiszámítására.

Hozzunk létre egy ZoneId Berlin, Németország esetében:

ZoneId zone = ZoneId.of ("Európa / Berlin");

2.2. ZoneOffset

ZoneOffset kiterjed ZoneId ésmeghatározzaaz aktuális időzóna fix eltolása GMT / UTC-vel, például +02: 00.

Ez azt jelenti, hogy ez a szám rögzített órákat és perceket jelent, az aktuális időzónában eltöltött idő és a GMT / UTC közötti különbséget jelenti:

LocalDateTime now = LocalDateTime.now (); ZoneId zone = ZoneId.of ("Európa / Berlin"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (most);

Abban az esetben, ha egy országnak 2 különböző ellentételezése van - nyáron és télen, 2 különböző lesz ZoneOffset ugyanazon régió megvalósításai, ezért meg kell adni a LocalDateTime.

3. Dátum idő Osztályok

Ezután beszéljünk néhányról Dátum idő osztályok, amelyek valóban kihasználják ZoneId és ZoneOffset.

3.1. ZonedDateTime

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. A ZonedDateTime három különálló objektumnak megfelelő állapotot tartalmaz, a LocalDateTime, a ZoneId és a határozott ZoneOffset.

Ez az osztály az összes dátum- és időmezőt nanoszekundum pontossággal és az időzónát tárolja a-val ZoneOffset, a kétértelmű helyi dátum-idők kezelésére. Például, ZonedDateTime tárolhatja a „2007. október 2-án, 13: 45.30.123456789 +0: 00-kor az Európa / Párizs időzónában” értéket.

Vegyük az áramot ZonedDateTime az előző régió esetében:

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

ZonedDateTime is beépített funkciókat biztosít az adott dátum egyik időzónából a másikba konvertálásához:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime a dátum-idő változhatatlan ábrázolása eltolással az ISO-8601 naptárrendszerben, mint pl 2007-12-03T10: 15: 30 + 01: 00.

Ez az osztály az összes dátum- és időmezőt tárolja nanoszekundum pontossággal, valamint a GMT / UTC eltolását. Például,OffsetDateTime tárolni tudja a „2007. október 2., 13: 45.30.123456789 +02: 00” értéket.

Vegyük az áramot OffsetDateTime 2 óra eltolással GMT / UTC-től:

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

3.3. OffsetTime

OffsetTime egy megváltoztathatatlan dátum-idő objektum, amely az ISO-8601 naptári rendszerben gyakran óra-perc-másodperc eltolásnak tekinthető időt képvisel, mint pl. 10:15:30+01:00.

Ez az osztály minden időmezőt tárol, nanoszekundum pontossággal, valamint egy zónaeltolást. Például, OffsetTime tárolni tudja a „13: 45.30.123456789 + 02: 00” értéket.

Vegyük az áramotOffsetTime2 óra eltolással:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); OffsetTime time = OffsetTime.now (zoneOffSet);

4. Következtetés

Visszatérés a fókuszponthoz, ZoneOffset az időzóna ábrázolása a GMT / UTC és az adott idő közötti különbség szempontjából. Ez az időzónák reprezentálásának praktikus módja, bár vannak más ábrázolások is.

Ráadásul, ZoneId és ZoneOffset nemcsak önállóan használják, hanem bizonyosak is Dátum idő Java osztályok, mint pl ZonedDateTime, OffsetDateTime, és OffsetTime.

Szokás szerint a kód elérhető a GitHub adattárunkban.