ZoneOffset v Jave

1. Úvod

V našom svete sa každá krajina riadi určitým časovým pásmom. Tieto časové pásma sú rozhodujúce pre pohodlné a efektívne vyjadrenie času. Časové pásma však môžu byť niekedy nepresné kvôli premenným, ako je napríklad letný čas, ktoré prichádzajú do obrazu.

Okrem toho, pri predstavovaní týchto časových pásiem v našom kóde, môže to byť mätúce. Java poskytla viac tried ako napr Dátum, Čas a Dátum Čas v minulosti sa starali aj o časové pásma.

Nové verzie Java však prišli s užitočnejšími a expresívnejšími triedami ako napr ZoneId a ZoneOffset, na správu časových pásiem.

V tomto článku budeme diskutovať ZoneId a ZoneOffset ako aj súvisiace Dátum Čas triedy.

Môžeme si tiež prečítať o novej sade Dátum Čas triedy zavedené v Jave 8 v našom predchádzajúcom príspevku.

2. ZoneId a ZoneOffset

S príchodom JSR-310 boli pridané niektoré užitočné API pre správu dátumu, času a časových pásiem. ZoneId a ZoneOffset triedy boli tiež pridané ako súčasť tejto aktualizácie.

2.1. ZoneId

Ako bolo uvedené vyššie, ZoneId je znázornenie časového pásma ako napríklad „Európa / Paríž‘.

Existujú 2 implementácie ZoneId. Po prvé, s pevným posunom v porovnaní s GMT / UTC. A za druhé, ako geografický región, ktorý má súbor pravidiel na výpočet posunu pomocou GMT / UTC.

Vytvorme a ZoneId pre Berlín, Nemecko:

ZoneId zóna = ZoneId.of ("Európa / Berlín");

2.2. ZoneOffset

ZoneOffset predlžuje ZoneId adefinujepevný posun aktuálneho časového pásma s GMT / UTC, napríklad +02: 00.

To znamená, že toto číslo predstavuje pevné hodiny a minúty, čo predstavuje rozdiel medzi časom v aktuálnom časovom pásme a GMT / UTC:

LocalDateTime now = LocalDateTime.now (); ZoneId zóna = ZoneId.of ("Európa / Berlín"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (teraz);

V prípade, že má krajina 2 rôzne vyrovnania - v lete a v zime, budú 2 rôzne ZoneOffset implementácie pre ten istý región, z toho vyplýva potreba špecifikovať a LocalDateTime.

3. Dátum Čas Triedy

Ďalej poďme diskutovať o niektorých Dátum Čas triedy, ktoré skutočne využívajú výhody ZoneId a ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime je nemenná reprezentácia dátumu a času s časovým pásmom v kalendárnom systéme ISO-8601, ako napr 2007-12-03T10: 15: 30 + 01: 00 Európa / Paris. A ZonedDateTime obsahuje stav ekvivalentný trom samostatným objektom, a LocalDateTime, a ZoneId a vyriešené ZoneOffset.

Táto trieda ukladá všetky polia dátumu a času s presnosťou na nanosekundy a časové pásmo s a ZoneOffset, na spracovanie nejednoznačných miestnych dátumov a časov. Napríklad, ZonedDateTime môže uložiť hodnotu „2. októbra 2007 o 13: 45.30.123456789 +02: 00 v časovom pásme Európa / Paríž“.

Zoberme si prúd ZonedDateTime pre predchádzajúci región:

ZoneId zóna = ZoneId.of ("Európa / Berlín"); ZonedDateTime date = ZonedDateTime.now (zóna);

ZonedDateTime tiež poskytuje zabudované funkcie na prevod daného dátumu z jedného časového pásma na druhé:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime je nemenná reprezentácia dátumu a času s posunom v kalendárnom systéme ISO-8601, ako napr 2007-12-03T10: 15: 30 + 01: 00.

Táto trieda ukladá všetky polia dátumu a času s presnosťou na nanosekundy a tiež s posunom od GMT / UTC. Napríklad,OffsetDateTime môže uložiť hodnotu „2. októbra 2007 o 13: 45.30.123456789 +02: 00“.

Zoberme si prúd OffsetDateTime s 2 hodinovým posunom od GMT / UTC:

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

3.3. Čas posunu

Čas posunu je nemenný objekt dátumu a času, ktorý predstavuje čas, ktorý sa v kalendárnom systéme ISO-8601 často považuje za posunutie hodín, minút a sekúnd, ako napr. 10:15:30+01:00.

Táto trieda ukladá všetky časové polia s presnosťou na nanosekundy a tiež na posun zóny. Napríklad, Čas posunu môže uložiť hodnotu „13: 45.30.123456789 + 02: 00“.

Zoberme si prúdČas posunus 2 hodinovým posunom:

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

4. Záver

Vrátiť sa k ústrednému bodu, ZoneOffset je vyjadrenie časového pásma z hľadiska rozdielu medzi GMT / UTC a daným časom. Toto je praktický spôsob vyjadrenia časovej zóny, aj keď sú k dispozícii aj iné vyjadrenia.

Navyše, ZoneId a ZoneOffset sa používajú nielen samostatne, ale aj určitými Dátum Čas Java triedy ako napr ZonedDateTime, OffsetDateTimea Čas posunu.

Ako obvykle je kód k dispozícii v našom úložisku GitHub.


$config[zx-auto] not found$config[zx-overlay] not found