Prelucrarea datelor și orelor este o sarcină destul de dificilă. În lume există un număr mare de fusuri orare, care se schimbă periodic. Este necesar să se ia în considerare trecerea la ora de iarnă și de vară, secunde de coordonare. anii blestemați și multe altele.
Java a fost în jur de ceva timp, și au existat câteva încercări de a crea cursuri pentru prelucrarea datelor. Aici subliniez în general trei schițe:
-
- java.util.Date este cea mai veche metodă. Majoritatea metodelor sunt depreciate, însă clasa în sine este încă utilizată destul de des.
- java.util.Calendar - De obicei folosit împreună cu java. UTIL. Data.
- Pachetul java.time este un mod nou, depășește cu mult pe cele anterioare în ceea ce privește confortul și funcționalitatea, dar nu este folosit atât de des (cel puțin l-am întâlnit foarte rar.
java.util.Date
Cea mai veche cale. Dacă te uiți la descrierea metodelor java.util.Date. atunci veți observa că majoritatea metodelor sunt depreciate. Foarte util și de lucru doar un pic.
Returnează fusul orar asociat cu această instanță din Calendar.
Cel mai convenabil și mai modern mod de lucru cu data și ora. Acesta provine din biblioteca Joda-Time.
Există două moduri de bază de reprezentare a timpului. O modalitate reprezintă timpul în termeni de persoană, cum ar fi an, lună, zi, oră, minut și secundă. A doua modalitate este timpul mașinii, măsurând timpul continuu de la început, numit epocă, în nanosecunde. Pachetul Date-Time conține un număr mare de clase care reprezintă data și ora. Unele clase din API-ul Date-Time reprezintă ora computerului, unele umane.
În primul rând, stabiliți ce aspecte ale datei și timpului de care aveți nevoie, apoi selectați o clasă sau clase care se potrivesc nevoilor dvs.
De exemplu, puteți alege java. timp. LocalDate pentru a stoca data nașterii, deoarece mulți oameni își sărbătoresc ziua de naștere în aceeași zi, indiferent dacă se află în locul nașterii sau pe cealaltă parte a Pământului. Dacă aveți nevoie de timp astrologic, atunci puteți folosi java. timp. LocalDateTime. pentru a afișa data și ziua de naștere sau java. timp. ZonedDateTime. care conține suplimentar fusul orar. Dacă creați o marcă de timp, atunci cel mai probabil doriți să utilizați java. timp. Instant. care vă permite să comparați un timbru cu altul.
Tabelul sumar al clasei pachetului java. timp:
Clasă sau transfer
* secunde sunt considerate exacte la nanosecunde
** Această clasă nu stochează aceste informații, dar are metode pentru a obține timp în ele.
*** Când Perioada este adăugată la ZonedDateTime. apoi luați în considerare trecerea la timpul de iarnă / vară și diferența de timp local.
java.time.DayOfWeek
Enumerarea java.time.DayOfWeek constă din șapte constante care descriu zilele săptămânii. Valorile întregi pentru constante încep cu 1 (luni) și se termină cu 7 (duminică).
LUNI (Luni, 1)
MIERCURI (marți, 2)
MIERCURI (miercuri, 3)
JOI (joi, 4)
VINERI (vineri, 5)
SĂPTĂMÂNT (sâmbătă, 6)
Duminica (duminică, 7)
Puteți folosi metoda public String getDisplayName (TextStyle style.Localale locale) pentru a obține zilele din săptămânile în funcție de setările regionale ale utilizatorului. Enumerarea java. timp. format. TextStyle vă permite să specificați tipul șirului: FULL. NARROW (de obicei o literă), SHORT (abreviere).
Clase de java. timp. ZonedDateTime și java. timp. OffsetDateTime poate fi convertit într-o instanță java. timp. Instant. deoarece acestea indică un anumit moment în timp. Cu toate acestea, trebuie să specificați un fus orar sau o compensare pentru conversia inversă.
Formatarea și conversia dintr-un șir
Clasele temporare din API-ul Data-Time conțin metodele de parsare și formatare pentru parsarea datei și / sau a timpului dintr-un șir și ieșirea formatată într-un șir. Aceste metode iau o instanță a clasei java.time.format.DateTimeFormatter. Clasa DateTimeFormatter conține un număr mare de formatori predefiniți, de asemenea puteți defini propriul dvs. formatator.
Metodele de analiză și format aruncă o excepție, dacă în timpul conversiei există o problemă. Codul dvs. de analiză ar trebui să captureze excepția java.time.format.DateTimeParseException. iar codul de formatare ar trebui să captureze java.time.format.DateTimeException Aceste excepții nu pot fi verificate, astfel încât compilatorul nu va cere procesarea lor obligatorie.
Clasa java. timp. format. DateTimeFormatter este imuabil și thread-safe. Puteți să o atribuiți unei constante, dacă este necesar.
Clase de la java. timpul poate fi folosit în java. UTIL. Formatter și String. format. precum și clasele vechi de java. UTIL. Data și java. UTIL. Calendar.
java.time.temporal.TemporalAdjuster
Interfața java.time.temporal.TemporalAdjuster conține metode care iau o valoare de timp și o returnează aliniată de o anumită valoare principală.
Clasa java.time.temporal.TemporalAdjusters conține egalizatoare predefinite pentru data și ora pentru a găsi prima sau ultima zi din lună, prima sau ultima zi a anului, ultima miercuri a lunii și așa mai departe.
Aceste calcule nu iau în considerare diferența în fusurile orare. De exemplu, dacă v-ați născut în Australia și acum trăiți în Bangalore, atunci acest lucru poate avea un impact mic asupra calculului vârstei dvs. În situații similare, utilizați perioada împreună cu ZonedDateTime.
java.time.Clock
Multe clase cu o dată și oră conțin metoda now (). care creează un obiect cu data și ora curente, utilizând ceasul de sistem și fusul orar prestabilit. Aceleași obiecte conțin, de asemenea, metoda acum (Ceas). care vă permite să treci o altă java. timp. Ceas.
Data și ora curente depind de fusul orar și de aplicațiile globale, este necesar C. Pentru a asigura crearea unei date / orei cu un fus orar corect. În ciuda faptului că utilizarea java. timp. Ceasul este opțional, însă această funcție vă ajută să vă testați codul cu alte fusuri orare sau cu un timp fix.
Clasa ceasului este abstractă, deci nu puteți să o instanțiați. Următoarele metode de fabricare pot fi utile pentru testare:
- Clock.offset (Ceas, Durată) returnează ceasul, care este o deplasare la durata specificată.
- Clock.systemUTC () returnează un ceas care conține fusul orar al Greenwich / UTC.
- Clock.fixed (Instant, ZoneId) întoarce întotdeauna același instantaneu. Pentru asta, Ceasul nu merge la timp, sa oprit.
Mai multe intrări din această categorie: