1. Prezentarea API-ului Date Time

Creatorilor Java nu le-a plăcut situația cu clasele Date și Calendar. Erau buni în zilele lor, dar vremurile se schimbă. Și ceva simplu, puternic și de încredere a devenit necesar. Și odată cu lansarea Java 8 (la 15 ani după Calendarapariție), a fost introdus API-ul Java Date Time . Este un set de clase care ar trebui să poată rezolva orice sarcină posibilă care se ocupă de timp.
Au fost atât de multe clase încât au fost împărțite în mai multe pachete:
Pachetul java.timeeste pachetul de bază pentru API-ul Java Date Time: conține clase precum LocalDate, LocalTime, LocalDateTime, Instant, Periodși Duration. Toate obiectele acestor clase sunt immutable, ceea ce înseamnă că nu pot fi modificate după creare.
Pachetul java.time.formatconține clase pentru formatarea orei, adică conversia orelor (și a datelor) în șiruri de caractere și invers. De exemplu, conține DateTimeFormatterclasa versatilă, care înlocuiește SimpleDateFormatclasa.
Pachetul java.time.zoneconține clase pentru lucrul cu fusurile orare. Conține clase precum TimeZoneși ZonedDateTime. Dacă scrieți cod de server pentru clienți aflați în diferite părți ale lumii, veți avea nevoie într-adevăr de aceste clase.
2. LocalDateclasa
Prima și cea mai utilă clasă din API-ul Date Time la care ne vom uita este LocalDateclasa. După cum probabil puteți ghici din numele său, această clasă este concepută pentru a lucra cu date.
Obiectele acestei clase nu se schimbă după ce sunt create, adică clasa LocalDateeste imuabilă. Dar această proprietate adaugă simplitate și fiabilitate clasei. Mai ales dacă mai multe fire (fire de execuție) interacționează cu un astfel de obiect în același timp.
Pentru a crea un obiect nou LocalDate, trebuie să utilizați una dintre metodele statice. Iată o listă a celor principale.
Obținerea datei curente
Pentru a obține data curentă, trebuie să utilizați now()metoda statică. Acest lucru este mult mai ușor decât pare:
LocalDate today = LocalDate.now();
Unde todayeste o LocalDatevariabilă și LocalDate.now()este un apel la metoda statică now()a LocalDateclasei.
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
Obținerea unei date într-un anumit fus orar
Clasa LocalDateare, de asemenea, o variantă a now(ZoneId)metodei care vă permite să obțineți data curentă într-un anumit fus orar.
Pentru a face acest lucru, avem nevoie de o altă clasă - ZoneIdclasa (java.time.ZoneId). Are o of()metodă care returnează un ZoneIdobiect cu numele fusului orar.
Pentru a determina data curentă în Shanghai, trebuie să scrieți următorul cod:
| Cod | Ieșire de consolă |
|---|---|
|
|
Puteți găsi o listă cu numele tuturor fusurilor orare pe Internet.
3. Obținerea unei date specifice
Pentru a obține un LocalDateobiect care reprezintă o anumită dată, trebuie să utilizați of()metoda statică. Totul aici este, de asemenea, foarte simplu și clar:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Unde dateeste o LocalDatevariabilă și este un apel la metoda statică a clasei.LocalDate.of()of()LocalDate
Aici vedem FEBRUARYconstanta clasei Month(java.time.Month) fiind folosită pentru a specifica luna februarie.
De asemenea, puteți specifica luna în mod vechi - folosind un număr:
LocalDate date = LocalDate.of(2019, 2, 22);
Două? În loc de februarie? Înseamnă asta că lunile sunt din nou numărate de la unu?
Da, la aproape 20 de ani de la crearea Java, lunile au încetat în sfârșit să fie numărate de la zero.
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
Obținerea unei date după indexul zilei
Există o altă modalitate interesantă de a crea o dată: folosind ofYearDaymetoda, puteți obține o dată bazată numai pe numărul anului și indexul zilei din an. Iată aspectul general:
LocalDate date = LocalDate.ofYearDay(year, day);
Unde yeareste numărul anului și dayeste indicele zilei din an.
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
A 100-a zi a anului 2019 este 10 aprilie.
Obținerea unei date Unix
Îți amintești că Dateobiectele au stocat întotdeauna timpul ca număr de milisecunde de la 1 ianuarie 1970? Pentru a se asigura că programatorii nu vor rata vremurile bune, LocalDateclasa a primit o ofEpochDay()metodă, care returnează data calculată de la 1 ianuarie 1970. Iată aspectul general:
LocalDate date = LocalDate.ofEpochDay(day);
Unde dayeste numărul de zile care au trecut de la 1 ianuarie 1970.
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
4. Obținerea elementelor unei date
Este imposibil să schimbați LocalDateobiecte, dar puteți obține elemente individuale ale datei stocate. LocalDateobiectele au mai multe metode pentru aceasta:
| Metodă | Descriere |
|---|---|
|
Returnează anul unei anumite date |
|
Returnează luna datei: una dintre mai multe constanteJANUARY, FEBRUARY, ...; |
|
Returnează indexul lunii datei. ianuarie == 1. |
|
Returnează indexul zilei lunii |
|
Returnează indexul zilei de la începutul anului |
|
Returnează ziua săptămânii: una dintre mai multe constanteMONDAY, TUESDAY, ...; |
|
Returnează epoca: fie BCE(Înainte de era actuală) și CE(Era actuală) |
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
5. Modificarea datei într-un LocalDateobiect
Clasa LocalDateconține mai multe metode care vă permit să lucrați cu datele. Implementarea acestor metode este analogă cu metodele clasei String: ele nu schimbă LocalDateobiectul existent, ci în schimb returnează unul nou cu datele dorite.
Iată metodele clasei LocalDate:
| Metodă | Descriere |
|---|---|
|
Adaugă un anumit număr de zile la dată |
|
Adaugă săptămâni la dată |
|
Adaugă luni la dată |
|
Adaugă ani la dată |
|
Scade zile de la dată |
|
Scade săptămâni de la dată |
|
Scăde luni de la dată |
|
Scade ani de la data |
Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
Metodele birthday objectcărora le numim nu se schimbă. În schimb, metodele sale returnează noi obiecte care conțin datele dorite.
GO TO FULL VERSION