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ă Calendar
apariț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.time
este 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.format
conține clase pentru formatarea orei, adică conversia orelor (și a datelor) în șiruri de caractere și invers. De exemplu, conține DateTimeFormatter
clasa versatilă, care înlocuiește SimpleDateFormat
clasa.
Pachetul java.time.zone
conț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. LocalDate
clasa
Prima și cea mai utilă clasă din API-ul Date Time la care ne vom uita este LocalDate
clasa. 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 LocalDate
este 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 today
este o LocalDate
variabilă și LocalDate.now()
este un apel la metoda statică now()
a LocalDate
clasei.
Exemplu:
Cod | Ieșire de consolă |
---|---|
|
|
Obținerea unei date într-un anumit fus orar
Clasa LocalDate
are, 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ă - ZoneId
clasa (java.time.ZoneId). Are o of()
metodă care returnează un ZoneId
obiect 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 LocalDate
obiect 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 date
este o LocalDate
variabilă și este un apel la metoda statică a clasei.LocalDate.of()
of()
LocalDate
Aici vedem FEBRUARY
constanta 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 ofYearDay
metoda, 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 year
este numărul anului și day
este 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ă Date
obiectele 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, LocalDate
clasa a primit o ofEpochDay()
metodă, care returnează data calculată de la 1 ianuarie 1970. Iată aspectul general:
LocalDate date = LocalDate.ofEpochDay(day);
Unde day
este 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 LocalDate
obiecte, dar puteți obține elemente individuale ale datei stocate. LocalDate
obiectele 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 LocalDate
obiect
Clasa LocalDate
conține mai multe metode care vă permit să lucrați cu datele. Implementarea acestor metode este analogă cu metodele clasei String
: ele nu schimbă LocalDate
obiectul 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 object
cărora le numim nu se schimbă. În schimb, metodele sale returnează noi obiecte care conțin datele dorite.
GO TO FULL VERSION