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 unClockcodului și foloseșteClock.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.