logo

Data și ora Java

Pachetele java.time, java.util, java.sql și java.text conțin clase pentru reprezentarea datei și orei. Următoarele clase sunt importante pentru a trata data în Java.

Java 8 Data/Time API

Java a introdus un nou API Date and Time începând cu Java 8. Pachetul java.time conține clase Java 8 Date și Ora.

API-ul clasic de dată/ora

Dar API-ul Java Date clasic sau vechi este de asemenea util. Să vedem lista claselor clasice de date și oră.

Formatarea datei și orei

Putem formata data și ora în Java utilizând următoarele clase:

API-uri Java Data și Ora

Java oferă funcționalitatea de dată și oră cu ajutorul a două pachete java.time și java.util. Pachetul java.time este introdus în Java 8, iar clasele nou introduse încearcă să depășească deficiențele claselor moștenite java.util.Date și java.util.Calendar.

Clasele clasice API Date Time

Clasele primare înainte de lansarea Java 8 au fost:

port de ascultare

Java.lang.System: Clasa oferă metoda currentTimeMillis() care returnează ora curentă în milisecunde. Afișează data și ora curente în milisecunde de la 1 ianuarie 1970.

java.util.Date: Este folosit pentru a afișa un anumit moment de timp, cu unitatea de milisecundă.

java.util.Calendar: Este o clasă abstractă care oferă metode de conversie între instanțe și de manipulare a câmpurilor calendarului în moduri diferite.

java.text.SimpleDateFormat: Este o clasă care este folosită pentru a formata și a analiza datele într-o manieră predefinită sau un model definit de utilizator.

java.util.TimeZone: Reprezintă o compensare a fusului orar și, de asemenea, calculează ora de vară.

Dezavantajele API-urilor date/ora existente

    Siguranța firului:Clasele existente, cum ar fi Data și Calendarul, nu asigură siguranța firelor. Prin urmare, duce la probleme de concurență greu de depanat, care trebuie să fie îngrijite de dezvoltatori. Noile API-uri de dată și oră din Java 8 oferă siguranță firului de execuție și sunt imuabile, evitând astfel problema concurenței din partea dezvoltatorilor.Proiectare API greșită:API-urile clasice Date și Calendar nu oferă metode pentru a efectua funcționalități de bază de zi cu zi. Clasele Data și Ora introduse în Java 8 sunt centrate pe ISO și oferă un număr de metode diferite pentru efectuarea operațiunilor referitoare la dată, oră, durată și perioade.Gestionare dificilă a fusului orar:Pentru a gestiona fusul orar folosind clasele clasice Date și Calendar este dificil, deoarece dezvoltatorii trebuiau să scrie logica pentru acesta. Cu noile API-uri, gestionarea fusului orar se poate face cu ușurință cu API-urile Local și ZonedDate/Time.

Noua interfață API Date Time în Java 8

Noul API pentru date ajută la depășirea dezavantajelor menționate mai sus cu clasele moștenite. Acesta include următoarele clase:

java.time.LocalDate: Reprezintă un an-lună-zi în calendarul ISO și este util pentru a reprezenta o dată fără oră. Poate fi folosit pentru a reprezenta doar informații despre o dată, cum ar fi data nașterii sau data nunții.

java.time.LocalTime: Se ocupă doar în timp. Este util pentru reprezentarea orei umane din zi, cum ar fi ora filmelor sau orele de deschidere și închidere ale bibliotecii locale.

java.time.LocalDateTime: Se ocupă atât de dată, cât și de oră, fără un fus orar. Este o combinație de LocalDate cu LocalTime.

java.time.ZonedDateTime: Combină clasa LocalDateTime cu informațiile de zonă oferite în clasa ZoneId. Reprezintă o ștampilă completă a datei și orei împreună cu informații despre fusul orar.

java.time.OffsetTime: Se ocupă de ora cu o compensare a fusului orar corespunzător față de Greenwich/UTC, fără un ID de fus orar.

java.time.OffsetDateTime: Se ocupă de o dată și oră cu o decalare a fusului orar corespunzător față de Greenwich/UTC, fără un ID de fus orar.

java.time.Clock : Oferă acces la momentul curent, data și ora în orice fus orar dat. Deși utilizarea clasei Clock este opțională, această caracteristică ne permite să testăm codul pentru alte fusuri orare sau folosind un ceas fix, unde ora nu se schimbă.

java.time.Instant : Reprezintă începutul unei nanosecunde pe linia temporală (de la EPOCH) și utilă pentru generarea unui marcaj de timp pentru a reprezenta timpul mașinii. Un moment care apare înaintea epocii are o valoare negativă, iar un moment care apare după epocă are o valoare pozitivă.

java.time.Duration : Diferența dintre două instante și măsurată în secunde sau nanosecunde și nu utilizează constructe bazate pe dată, cum ar fi ani, luni și zile, deși clasa oferă metode care se convertesc în zile, ore și minute.

java.time.Period : Este folosit pentru a defini diferența dintre date în valori bazate pe dată (ani, luni, zile).

java.time.ZoneId : Acesta indică un identificator de fus orar și oferă reguli pentru conversia între un Instant și un LocalDateTime.

java.time.ZoneOffset : Descrie un decalaj al fusului orar față de ora Greenwich/UTC.

java.time.format.DateTimeFormatter : Vine cu diverse formatatoare predefinite sau putem defini pe al nostru. Are metoda parse() sau format() pentru analizarea și formatarea valorilor date și oră.