Ce face LocalDate
LocalDate din pachetul java.time ține doar o dată: de exemplu 19 octombrie 2026. Nu are oră, minute sau fus orar. Este potrivită pentru zile de naștere, termene de plată, date de examen sau zile de concediu.
Obiectele LocalDate sunt imutabile: nu se schimbă niciodată. Metode ca plusDays sau withDayOfMonth nu modifică data originală, ci returnează o dată nouă. De aceea trebuie să păstrezi rezultatul într-o variabilă.
Nu există constructor public (new LocalDate() nu compilează). Creezi o dată cu metodele statice LocalDate.of, LocalDate.parse sau LocalDate.now. toString() afișează data în formatul ISO an-lună-zi (2026-10-19). Lunile sunt numerotate de la 1 (ianuarie) la 12, nu de la 0 ca în vechea clasă Calendar.
Ce returnează
Un obiect LocalDate. Câmpurile se citesc cu getYear(), getMonthValue(), getDayOfMonth(), getDayOfWeek().
Exemple
Exemplul 1: Crearea și afișarea unor date
Trei moduri de a obține o dată fixă. println folosește toString(), adică formatul ISO.
import java.time.LocalDate;
import java.time.Month;
public class Main {
public static void main(String[] args) {
LocalDate examen = LocalDate.of(2026, 10, 19);
LocalDate craciun = LocalDate.of(2026, Month.DECEMBER, 25);
LocalDate nastere = LocalDate.parse("2008-03-14");
System.out.println("Examenul: " + examen);
System.out.println("Crăciunul: " + craciun);
System.out.println("Ana s-a născut pe " + nastere);
System.out.println("Ziua săptămânii la examen: " + examen.getDayOfWeek());
}
}
Rezultat
Examenul: 2026-10-19
Crăciunul: 2026-12-25
Ana s-a născut pe 2008-03-14
Ziua săptămânii la examen: MONDAY
Exemplul 2: Datele sunt imutabile
plusDays nu schimbă variabila termen. Rezultatul trebuie salvat într-o variabilă nouă (sau în aceeași, cu atribuire).
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate termen = LocalDate.of(2026, 11, 1);
termen.plusDays(10); // rezultatul se pierde
System.out.println("Termen neschimbat: " + termen);
LocalDate prelungit = termen.plusDays(10); // rezultatul este păstrat
System.out.println("Termen prelungit: " + prelungit);
System.out.println("Sunt egale? " + termen.equals(prelungit));
}
}
Rezultat
Termen neschimbat: 2026-11-01
Termen prelungit: 2026-11-11
Sunt egale? false
Exemplul 3: Sortarea unei liste de date
LocalDate implementează Comparable, deci o listă de date se poate sorta direct, în ordine cronologică.
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<LocalDate> facturi = new ArrayList<>(List.of(
LocalDate.of(2026, 12, 5),
LocalDate.of(2026, 3, 20),
LocalDate.of(2025, 11, 30)));
Collections.sort(facturi);
System.out.println("În ordine: " + facturi);
System.out.println("Cea mai veche: " + facturi.getFirst());
}
}
Rezultat
În ordine: [2025-11-30, 2026-03-20, 2026-12-05]
Cea mai veche: 2025-11-30
Greșeli frecvente
- Apelezi o metodă de modificare și ignori rezultatul (
data.plusDays(1);). Data originală rămâne aceeași; scriedata = data.plusDays(1);. - Folosești vechile clase
java.util.DatesauCalendarîn cod nou. Acestea sunt mutabile și au luni numerotate de la 0. Pentru date fără oră foloseșteLocalDate. - Compari date cu
==. Două obiecte diferite cu aceeași dată nu sunt==. Foloseșteequals,isEqual,isBeforesauisAfter.
Comenzi înrudite
LocalDate.of: Creează o dată fixă din an, lună și zi; aruncă DateTimeException dacă data nu există.LocalDate.now: Returnează data de azi, după ceasul sistemului și fusul orar implicit (sau unul dat ca parametru).LocalDate.parse: Transformă un text într-o dată: implicit formatul ISO 2026-10-19, sau orice format dat printr-un DateTimeFormatter.LocalDate.plusDays: Returnează o dată nouă mutată cu un număr de zile înainte (plusDays) sau înapoi (minusDays).LocalDateTime: Data și ora împreună (2026-10-19T14:30), fără fus orar. LocalDateTime.now() dă momentul curent după ceasul local.Period: O perioadă de calendar în ani, luni și zile (P1Y2M3D); se adună la date ținând cont de lungimea lunilor.