ZoneOffset i Java

1. Introduksjon

I vår verden følger hvert land en viss tidssone. Disse tidssonene er avgjørende for å uttrykke tid på en praktisk og effektiv måte. Imidlertid kan tidssoner noen ganger være eksplisitte på grunn av variabler som sommertid, som kommer inn i bildet.

Dessuten kan ting bli forvirrende mens vi representerer disse tidssonene i koden vår. Java har levert flere klasser som Dato, Tid og Dato tid tidligere for å også ta vare på tidssoner.

Imidlertid har nye Java-versjoner kommet opp med mer nyttige og uttrykksfulle klasser som ZoneId og ZoneOffset, for å administrere tidssoner.

I denne artikkelen, vi vil diskutere ZoneId og ZoneOffset så vel som relaterte Dato tid klasser.

Vi kan også lese om det nye settet med Dato tid klasser introdusert i Java 8, i vårt forrige innlegg.

2. ZoneId og ZoneOffset

Med advent av JSR-310 ble noen nyttige API-er lagt til for å administrere dato, tid og tidssoner. ZoneId og ZoneOffset klasser ble også lagt til som en del av denne oppdateringen.

2.1. ZoneId

Som nevnt over, ZoneId er en representasjon av tidssonen som for eksempel 'Europa / Paris‘.

Det er to implementeringer av ZoneId. Først med en fast forskyvning sammenlignet med GMT / UTC. Og for det andre, som en geografisk region, som har et sett med regler for å beregne forskyvningen med GMT / UTC.

La oss lage en ZoneId for Berlin, Tyskland:

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

2.2. ZoneOffset

ZoneOffset strekker ZoneId ogdefinererden faste forskyvningen av gjeldende tidssone med GMT / UTC, for eksempel +02: 00.

Dette betyr at dette tallet representerer faste timer og minutter, som representerer forskjellen mellom tiden i gjeldende tidssone og GMT / UTC:

LocalDateTime nå = LocalDateTime.now (); ZoneId zone = ZoneId.of ("Europe / Berlin"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (nå);

I tilfelle et land har to forskjellige forskyvninger - om sommeren og vinteren, vil det være to forskjellige ZoneOffset implementeringer for samme region, derav behovet for å spesifisere en LocalDateTime.

3. Dato tid Klasser

La oss deretter diskutere noen Dato tid klasser, som faktisk utnytter ZoneId og ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime er en uforanderlig fremstilling av en dato-tid med en tidssone i ISO-8601 kalendersystemet, for eksempel 2007-12-03T10: 15: 30 + 01: 00 Europe / Paris. EN ZonedDateTime holder tilstand tilsvarende tre separate objekter, a LocalDateTime, a ZoneId og løst ZoneOffset.

Denne klassen lagrer alle dato- og tidsfelter, med en presisjon på nanosekunder, og en tidssone, med en ZoneOffset, for å håndtere tvetydige lokale dato-tider. For eksempel, ZonedDateTime kan lagre verdien "2. oktober 2007 kl. 13: 45.30.123456789 +02: 00 i tidssone Europa / Paris".

La oss få strømmen ZonedDateTime for forrige region:

ZoneId zone = ZoneId.of ("Europe / Berlin"); ZonedDateTime date = ZonedDateTime.now (sone);

ZonedDateTime også gir innebygde funksjoner for å konvertere en gitt dato fra en tidssone til en annen:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime er en uforanderlig fremstilling av en dato og klokkeslett med en forskyvning i ISO-8601-kalendersystemet, som f.eks 2007-12-03T10: 15: 30 + 01: 00.

Denne klassen lagrer alle dato- og tidsfelter, med en presisjon på nanosekunder, samt forskyvning fra GMT / UTC. For eksempel,OffsetDateTime kan lagre verdien “2. oktober 2007 kl. 13: 45.30.123456789 +02: 00”.

La oss få strømmen OffsetDateTime med 2 timers forskyvning fra GMT / UTC:

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

3.3. OffsetTime

OffsetTime er et uforanderlig dato-tidsobjekt som representerer en tid, ofte sett på som time-minutt-sekund-forskyvning, i ISO-8601-kalendersystemet, for eksempel 10:15:30+01:00.

Denne klassen lagrer felt overalt, med en presisjon på nanosekunder, samt en soneforskyvning. For eksempel, OffsetTime kan lagre verdien “13: 45.30.123456789 + 02: 00”.

La oss få strømmenOffsetTimemed 2 timers forskyvning:

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

4. Konklusjon

Å komme tilbake til fokuspunktet, ZoneOffset er en fremstilling av tidssone når det gjelder forskjellen mellom GMT / UTC og gitt tid. Dette er en praktisk måte å representere tidssone på, selv om det også finnes andre representasjoner.

Videre ZoneId og ZoneOffset brukes ikke bare uavhengig, men også av visse Dato tid Java-klasser som ZonedDateTime, OffsetDateTime, og OffsetTime.

Som vanlig er koden tilgjengelig i GitHub-depotet vårt.


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