1. ZonedDateTime
clasa
Există o altă clasă foarte interesantă în API-ul Date Time: ZonedDateTime
clasa. Scopul său principal este de a facilita lucrul cu date în diferite fusuri orare.
LocalDate
este excelent pentru a reprezenta datele. De exemplu, zilele de naștere. Ziua mea de naștere este 15 martie, indiferent unde mă aflu. Acesta este un exemplu de întâlnire.
LocalTime
este grozav să descrii timpul, ca și ora setată pe un ceas cu alarmă: am setat alarma pentru ora 5:00 și nu contează unde mă aflu. 5:00 este 5:00. Acesta este un exemplu de lucru cu timpul.
Acum să presupunem că scriem o aplicație care rezervă zboruri. Avioanele decolează și sosesc în funcție de ora locală. Avionul este în aer pentru o oră fixă, dar fusurile orare se pot schimba.
Fusuri orare
Apropo, fusurile orare sunt o adevărată mizerie. Și dacă crezi că există 24 de fusuri orare, te înșeli foarte mult.
De exemplu, ora din India diferă de Greenwich Mean Time cu cinci ore și jumătate: GMT+5:30
. Unele țări trec la ora de vară, iar altele nu. În plus, diferite țări trec la ora de vară în diferite perioade ale anului.
Și unele țări adoptă legi care anulează ora de vară sau o reintroduc sau o anulează din nou.
În orice caz, lumea are fusuri orare, iar în fiecare fus orar există o singură oră. Ora din diferite zone poate coincide în anumite perioade ale anului și apoi poate diferi în alte perioade. Fusurile orare sunt de obicei denumite după marile orașe situate în ele: Europe/Monaco
, Asia/Singapore
, dar există și excepții — US/Pacific
.
Oficial, există 599 de fusuri orare în acest moment. Gândește-te: 599. Este departe de 24. Bun venit în lumea globală.
Clasa ZoneId
din java.time
pachet este folosită pentru a stoca un fus orar în Java.
Apropo, are o getAvailableZoneIds()
metodă statică, care returnează setul tuturor fusurilor orare cunoscute în prezent. Pentru a obține o listă a tuturor zonelor, trebuie să scrieți următorul cod:
Cod | Ieșire din consolă (parțială) |
---|---|
|
|
Pentru a obține un ZoneId
obiect după numele său, trebuie să utilizați of()
metoda statică;
Cod | Notă |
---|---|
|
|
2. Crearea unui ZonedDateTime
obiect
Când creați un ZonedDateTime
obiect, trebuie să apelați now()
metoda statică a clasei și să ZoneId
îi transmiteți un obiect.
Cod | Ieșire de consolă |
---|---|
|
|
Dacă nu treceți un ZoneId
obiect metodei now()
(și acest lucru este permis), atunci fusul orar este determinat automat pe baza setărilor computerului care rulează programul.
Exemplu:
Cod | Ieșire de consolă |
---|---|
|
|
Transformarea unei date globale într-una locală
Una dintre caracteristicile interesante ale ZonedDateTime
este capacitatea sa de a converti la o dată și oră locală. Exemplu:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Lucrul cu timpul
La fel ca și LocalDateTime
clasa, ZonedDateTime
clasa are o mulțime de moduri de a obține elemente individuale ale unei date și ale unei ore. Iată o listă a acestor metode:
|
Returnează anul unei anumite date |
|
Returnează luna datei: una dintre mai multe constante —JANUARY, FEBRUARY, ...; |
|
Returnează indexul lunii datei. ianuarie == 1 |
|
Returnează indexul zilei lunii |
|
Returnează ziua săptămânii: una dintre mai multe constante —MONDAY, TUESDAY, ...; |
|
Returnează indexul zilei din an |
|
Returnează orele |
|
Returnează minutele |
|
Returnează secundele |
|
Returnează nanosecundele |
Toate metodele sunt perfect analoge cu metodele clasei LocalDateTime
. Și, desigur, ZonedDateTime
clasa are metode care vă permit să lucrați cu date și ore. Acestea fiind spuse, obiectul pe care sunt apelate metodele nu se schimbă. În schimb, returnează un nou ZonedDateTime
obiect:
Metode | Descriere |
---|---|
|
Adaugă ani la dată |
|
Adaugă luni la dată |
|
Adaugă zile la dată |
|
Adaugă ore |
|
Adaugă minute |
|
Adaugă secunde |
|
Adaugă nanosecunde |
|
Scade ani de la data |
|
Scăde luni de la dată |
|
Scade zile de la dată |
|
Scade ore |
|
Scade minute |
|
Scade secunde |
|
Scade nanosecunde |
Nu vom oferi niciun exemplu, deoarece credem că totul aici este clar prin analogie cu clasele pe care tocmai le-am luat în considerare.
GO TO FULL VERSION