LocalDate în Java

Clasa pentru o dată calendaristică fără oră și fără fus orar: an, lună, zi. Obiectele ei nu se pot modifica.

Sintaxă
import java.time.LocalDate;

LocalDate data = LocalDate.of(2026, 10, 19);
LocalDate azi = LocalDate.now();
LocalDate d = LocalDate.parse("2026-10-19");

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; scrie data = data.plusDays(1);.
  • Folosești vechile clase java.util.Date sau Calendar în cod nou. Acestea sunt mutabile și au luni numerotate de la 0. Pentru date fără oră folosește LocalDate.
  • Compari date cu ==. Două obiecte diferite cu aceeași dată nu sunt ==. Folosește equals, isEqual, isBefore sau isAfter.

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.