ZoneOffset i Java

1. Introduktion

I vores verden følger hvert land en bestemt tidszone. Disse tidszoner er afgørende for at udtrykke tid bekvemt og effektivt. Imidlertid kan tidszoner undertiden være uforklarlige på grund af variabler som sommertid, der kommer ind i billedet.

Desuden kan ting blive forvirrende, mens de repræsenterer disse tidszoner i vores kode. Java har leveret flere klasser såsom Dato, Tid og Dato tid tidligere for også at tage sig af tidszoner.

Imidlertid er nye Java-versioner kommet med mere nyttige og udtryksfulde klasser som f.eks ZoneId og ZoneOffsettil styring af tidszoner.

I denne artikel vi diskuterer ZoneId og ZoneOffset såvel som relaterede Dato tid klasser.

Vi kan også læse om det nye sæt af Dato tid klasser introduceret i Java 8, i vores tidligere indlæg.

2. ZoneId og ZoneOffset

Med fremkomsten af ​​JSR-310 blev nogle nyttige API'er tilføjet til styring af dato, tid og tidszoner. ZoneId og ZoneOffset klasser blev også tilføjet som en del af denne opdatering.

2.1. ZoneId

Som nævnt ovenfor, ZoneId er en repræsentation af tidszonen såsom 'Europa / Paris‘.

Der er 2 implementeringer af ZoneId. For det første med en fast forskydning sammenlignet med GMT / UTC. Og for det andet som en geografisk region, der har et sæt regler til beregning af forskydningen med GMT / UTC.

Lad os oprette en ZoneId til Berlin, Tyskland:

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

2.2. ZoneOffset

ZoneOffset strækker sig ZoneId ogdefinererden faste forskydning af den aktuelle tidszone med GMT / UTC, såsom +02: 00.

Dette betyder, at dette tal repræsenterer faste timer og minutter, der repræsenterer forskellen mellem tiden i den aktuelle tidszone og GMT / UTC:

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

Hvis et land har to forskellige forskydninger - om sommeren og vinteren, vil der være to forskellige ZoneOffset implementeringer for samme region, derfor behovet for at specificere en LocalDateTime.

3. Dato tid Klasser

Lad os derefter diskutere nogle Dato tid klasser, der faktisk drager fordel af ZoneId og ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime er en uforanderlig gengivelse af en dato-tid med en tidszone i ISO-8601 kalendersystemet, såsom 2007-12-03T10: 15: 30 + 01: 00 Europa / Paris. EN ZonedDateTime holder tilstand svarende til tre separate objekter, a LocalDateTime, a ZoneId og løst ZoneOffset.

Denne klasse gemmer alle dato- og tidsfelter med en nøjagtighed på nanosekunder og en tidszone med en ZoneOffset, til at håndtere tvetydige lokale dato-tider. For eksempel, ZonedDateTime kan gemme værdien "2. oktober 2007 kl. 13: 45.30.123456789 +02: 00 i Europa / Paris tidszone".

Lad os få strømmen ZonedDateTime for den foregående region:

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

ZonedDateTime også giver indbyggede funktioner til at konvertere en given dato fra en tidszone til en anden:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime er en uforanderlig gengivelse af et dato-tidspunkt med en forskydning i ISO-8601-kalendersystemet, såsom 2007-12-03T10: 15: 30 + 01: 00.

Denne klasse gemmer alle dato- og tidsfelter med en nøjagtighed på nanosekunder såvel som forskydningen fra GMT / UTC. For eksempel,OffsetDateTime kan gemme værdien "2. oktober 2007 kl. 13: 45.30.123456789 +02: 00".

Lad os få strømmen OffsetDateTime med 2 timers forskydning fra GMT / UTC:

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

3.3. OffsetTime

OffsetTime er et uforanderligt dato- og tidsobjekt, der repræsenterer en tid, ofte set som time-minut-sekund-offset, i ISO-8601-kalendersystemet, f.eks. 10:15:30+01:00.

Denne klasse gemmer alle tidsfelter med en nøjagtighed på nanosekunder samt en zoneforskydning. For eksempel, OffsetTime kan gemme værdien “13: 45.30.123456789 + 02: 00”.

Lad os få strømmenOffsetTimemed 2 timers forskydning:

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

4. Konklusion

At komme tilbage til fokuspunktet, ZoneOffset er en gengivelse af tidszone med hensyn til forskellen mellem GMT / UTC og den givne tid. Dette er en praktisk måde at repræsentere tidszone på, selvom der også findes andre repræsentationer.

I øvrigt, ZoneId og ZoneOffset bruges ikke kun uafhængigt, men også af visse Dato tid Java-klasser som f.eks ZonedDateTime, OffsetDateTimeog OffsetTime.

Som sædvanlig er koden tilgængelig i vores GitHub-lager.


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