LocalDate.now în Java

Returnează data de azi, după ceasul sistemului și fusul orar implicit (sau unul dat ca parametru).

Sintaxă
static LocalDate now()
static LocalDate now(ZoneId zona)
static LocalDate now(Clock ceas)

Ce face LocalDate.now

LocalDate.now() citește ceasul calculatorului și returnează data curentă în fusul orar implicit al sistemului. Rezultatul diferă de la o zi la alta, deci un program care afișează now() nu dă mereu același rezultat.

Data de azi depinde de fusul orar: când la București este deja 20 octombrie, la New York poate fi încă 19 octombrie. Cu LocalDate.now(ZoneId.of("Europe/Bucharest")) alegi explicit fusul orar.

Varianta now(Clock) este utilă în teste: cu Clock.fixed(...) programul „crede” că azi este o anumită zi, iar rezultatul devine previzibil.

Parametri

Parametru Descriere
zona Opțional. Fusul orar după care se stabilește data, de exemplu ZoneId.of("Europe/Bucharest").
ceas Opțional. Un java.time.Clock; Clock.fixed dă mereu același moment.

Ce returnează

Data curentă ca LocalDate.

Exemple

Exemplul 1: Data de azi

Rezultatul depinde de ziua în care rulezi programul.

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        LocalDate azi = LocalDate.now();
        System.out.println("Azi este " + azi);
        System.out.println("Mâine va fi " + azi.plusDays(1));
        System.out.println("Ziua din an: " + azi.getDayOfYear());
    }
}

Rezultat posibil (diferă la fiecare rulare)

Azi este 2026-10-19
Mâine va fi 2026-10-20
Ziua din an: 292

Exemplul 2: Un ceas fix pentru rezultate previzibile

Clock.fixed oprește timpul la un moment ales. Codul care primește ceasul ca parametru se poate testa ușor.

import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;

public class Main {
    static String salut(Clock ceas) {
        LocalDate azi = LocalDate.now(ceas);
        return azi.getMonthValue() == 12 && azi.getDayOfMonth() == 25 ? "Crăciun fericit!" : "O zi bună!";
    }

    public static void main(String[] args) {
        ZoneId bucuresti = ZoneId.of("Europe/Bucharest");
        Clock craciun = Clock.fixed(Instant.parse("2026-12-25T08:00:00Z"), bucuresti);
        Clock toamna = Clock.fixed(Instant.parse("2026-10-19T08:00:00Z"), bucuresti);
        System.out.println(LocalDate.now(craciun) + ": " + salut(craciun));
        System.out.println(LocalDate.now(toamna) + ": " + salut(toamna));
    }
}

Rezultat

2026-12-25: Crăciun fericit!
2026-10-19: O zi bună!

Exemplul 3: Fusul orar schimbă ziua

Același moment (23:30 UTC) cade în zile diferite la București și la Los Angeles.

import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;

public class Main {
    public static void main(String[] args) {
        Instant moment = Instant.parse("2026-10-19T23:30:00Z");
        for (String zona : new String[] {"Europe/Bucharest", "UTC", "America/Los_Angeles"}) {
            Clock ceas = Clock.fixed(moment, ZoneId.of(zona));
            System.out.println(zona + " -> " + LocalDate.now(ceas));
        }
    }
}

Rezultat

Europe/Bucharest -> 2026-10-20
UTC -> 2026-10-19
America/Los_Angeles -> 2026-10-19

Greșeli frecvente

  • Scrii un test care compară LocalDate.now() cu o dată fixă. Testul trece azi și pică mâine. Transmite un Clock codului și folosește Clock.fixed în test.
  • Pe un server, presupui că fusul orar implicit este cel al României. Serverele rulează des în UTC; dă fusul orar explicit dacă ziua contează.

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.
  • LocalDateTime: Data și ora împreună (2026-10-19T14:30), fără fus orar. LocalDateTime.now() dă momentul curent după ceasul local.
  • ZoneId: Identifică un fus orar (Europe/Bucharest) cu regulile lui de oră de vară; of îl alege, systemDefault dă fusul sistemului.
  • ZonedDateTime: Data și ora împreună cu fusul orar (Europe/Bucharest); indică un moment exact și știe de ora de vară.
  • Instant: Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.