LocalDate.of în Java

Creează o dată fixă din an, lună și zi; aruncă DateTimeException dacă data nu există.

Sintaxă
static LocalDate of(int an, int luna, int zi)
static LocalDate of(int an, Month luna, int zi)

Ce face LocalDate.of

LocalDate.of(2026, 10, 19) este modul obișnuit de a crea o dată anume. Luna se dă ca număr de la 1 la 12 sau ca valoare a enumerării Month (Month.OCTOBER), care se citește mai ușor.

Spre deosebire de unele biblioteci care „repară” singure datele greșite, LocalDate.of verifică valorile. 31 aprilie sau 29 februarie într-un an care nu este bisect aruncă DateTimeException, cu un mesaj care spune exact ce nu este valid.

Parametri

Parametru Descriere
an Anul, de exemplu 2026. Sunt permiși și ani negativi sau foarte mari (−999999999 … 999999999).
luna Luna: un int de la 1 la 12 sau o valoare Month.
zi Ziua din lună, de la 1 la 28-31, după lună și an.

Ce returnează

Un LocalDate nou. Aruncă DateTimeException dacă valorile nu formează o dată reală.

Exemple

Exemplul 1: Date fixe dintr-un orar

import java.time.LocalDate;
import java.time.Month;

public class Main {
    public static void main(String[] args) {
        LocalDate inceputScoala = LocalDate.of(2026, 9, 8);
        LocalDate vacantaIarna = LocalDate.of(2026, Month.DECEMBER, 20);
        System.out.println("Școala începe: " + inceputScoala + " (" + inceputScoala.getDayOfWeek() + ")");
        System.out.println("Vacanța de iarnă: " + vacantaIarna + " (" + vacantaIarna.getDayOfWeek() + ")");
        System.out.println("Luna ca număr: " + vacantaIarna.getMonthValue());
    }
}

Rezultat

Școala începe: 2026-09-08 (TUESDAY)
Vacanța de iarnă: 2026-12-20 (SUNDAY)
Luna ca număr: 12

Exemplul 2: O dată care nu există

2026 nu este an bisect, deci 29 februarie nu există. Excepția este prinsă și mesajul este afișat.

import java.time.DateTimeException;
import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        int[][] date = {{2024, 2, 29}, {2026, 2, 29}, {2026, 4, 31}};
        for (int[] d : date) {
            try {
                System.out.println("Valid: " + LocalDate.of(d[0], d[1], d[2]));
            } catch (DateTimeException e) {
                System.out.println("Invalid: " + e.getMessage());
            }
        }
    }
}

Rezultat

Valid: 2024-02-29
Invalid: Invalid date 'February 29' as '2026' is not a leap year
Invalid: Invalid date 'APRIL 31'

Greșeli frecvente

  • Scrii luna de la 0, ca în Calendar: LocalDate.of(2026, 0, 15) aruncă excepție. În java.time, ianuarie este 1.
  • Folosești LocalDate.of cu date introduse de utilizator fără try/catch. O zi greșită oprește programul cu DateTimeException.

Comenzi înrudite

  • LocalDate: Clasa pentru o dată calendaristică fără oră și fără fus orar: an, lună, zi. Obiectele ei nu se pot modifica.
  • LocalDate.parse: Transformă un text într-o dată: implicit formatul ISO 2026-10-19, sau orice format dat printr-un DateTimeFormatter.
  • Month: Enumerarea celor 12 luni (JANUARY = 1 … DECEMBER = 12), cu lungimea lunii și numele traduse.
  • LocalDateTime.of: of creează o dată cu oră din valori; parse citește una dintr-un text (ISO 2026-10-19T14:30 sau un format dat).