ZoneOffset u Javi

1. Uvod

U našem svijetu svaka zemlja slijedi određenu vremensku zonu. Te su vremenske zone ključne za udobno i učinkovito izražavanje vremena. Međutim, vremenske zone ponekad mogu biti eksplicitne zbog varijabli poput ljetnog računanja vremena koje dolaze na sliku.

Štoviše, dok predstavljamo ove vremenske zone u našem kodu, stvari mogu postati zbunjujuće. Java je osigurala više klasa kao što su Datum, Vrijeme i Datum vrijeme u prošlosti da se brine i o vremenskim zonama.

Međutim, nove Java verzije osmislile su korisnije i izražajnije klase poput ZoneId i ZoneOffset, za upravljanje vremenskim zonama.

U ovom članku, razgovarat ćemo ZoneId i ZoneOffset kao i povezane Datum vrijeme razreda.

Također možemo čitati o novom skupu Datum vrijeme klase predstavljene u Javi 8, u našem prethodnom postu.

2. ZoneId i ZoneOffset

Pojavom JSR-310 dodani su neki korisni API-ji za upravljanje datumom, vremenom i vremenskim zonama. ZoneId i ZoneOffset razredi su također dodani kao dio ovog ažuriranja.

2.1. ZoneId

Kao što je gore rečeno, ZoneId predstavlja vremensku zonu kao što jeEuropa / Pariz‘.

Postoje 2 implementacije ZoneId. Prvo, s fiksnim pomakom u odnosu na GMT / UTC. I drugo, kao zemljopisna regija koja ima niz pravila za izračunavanje odstupanja s GMT / UTC.

Stvorimo a ZoneId za Berlin, Njemačka:

ZoneId zone = ZoneId.of ("Europa / Berlin");

2.2. ZoneOffset

ZoneOffset proteže se ZoneId idefinirafiksni pomak trenutne vremenske zone s GMT / UTC, kao što je +02: 00.

To znači da ovaj broj predstavlja fiksne sate i minute, koji predstavljaju razliku između vremena u trenutnoj vremenskoj zoni i GMT / UTC:

LocalDateTime sada = LocalDateTime.now (); ZoneId zone = ZoneId.of ("Europa / Berlin"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (sada);

U slučaju da država ima 2 različita pomaka - ljeti i zimi, postojat će 2 različita pomaka ZoneOffset implementacije za istu regiju, otud potreba za određivanjem a LocalDateTime.

3. Datum vrijeme Nastava

Dalje razgovarajmo o nekima Datum vrijeme klase, koje zapravo iskorištavaju ZoneId i ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime je nepromjenjiv prikaz datuma i vremena s vremenskom zonom u sustavu kalendara ISO-8601, kao što je 2007-12-03T10: 15: 30 + 01: 00 Europa / Paris. A ZonedDateTime ima stanje ekvivalentno trima odvojenim objektima, a LocalDateTime, a ZoneId i riješen ZoneOffset.

Ova klasa pohranjuje sva polja datuma i vremena s preciznošću u nanosekunde i vremensku zonu s ZoneOffset, za rukovanje dvosmislenim lokalnim datumima i vremenima. Na primjer, ZonedDateTime može pohraniti vrijednost "2. listopada 2007. u 13: 45.30.123456789 +02: 00 u vremenskoj zoni Europa / Pariz".

Uzmimo struju ZonedDateTime za prethodnu regiju:

ZoneId zone = ZoneId.of ("Europa / Berlin"); ZonedDateTime date = ZonedDateTime.now (zona);

ZonedDateTime također pruža ugrađene funkcije za pretvaranje određenog datuma iz jedne vremenske zone u drugu:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime je nepromjenjiv prikaz datuma i vremena s pomakom u sustavu kalendara ISO-8601, kao što je 2007-12-03T10: 15: 30 + 01: 00.

Ova klasa pohranjuje sva polja datuma i vremena s preciznošću u nanosekunde, kao i odmak od GMT / UTC. Na primjer,OffsetDateTime može pohraniti vrijednost "2. listopada 2007. u 13: 45.30.123456789 +02: 00".

Uzmimo struju OffsetDateTime s 2 sata odmaka od GMT / UTC:

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

3.3. OffsetTime

OffsetTime je nepromjenjivi objekt datuma i vremena koji predstavlja vrijeme, često gledano kao pomak sata-minute-sekunde, u sustavu kalendara ISO-8601, kao što je 10:15:30+01:00.

Ova klasa pohranjuje sva vremenska polja s preciznošću od nanosekundi, kao i zonski pomak. Na primjer, OffsetTime može pohraniti vrijednost "13: 45.30.123456789 + 02: 00".

Uzmimo strujuOffsetTimes offsetom od 2 sata:

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

4. Zaključak

Vraćajući se u žarišnu točku, ZoneOffset predstavlja prikaz vremenske zone u smislu razlike između GMT / UTC i određenog vremena. Ovo je zgodan način predstavljanja vremenske zone, iako postoje i drugi prikazi.

Štoviše, ZoneId i ZoneOffset ne koriste se samo neovisno već i određeni Datum vrijeme Java klase kao što su ZonedDateTime, OffsetDateTime, i OffsetTime.

Kao i obično, kôd je dostupan u našem spremištu GitHub.


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