Ce face ChronoUnit
ChronoUnit conține unitățile standard de timp, de la nanosecunde la milenii. Le folosești ca parametru: data.plus(3, ChronoUnit.WEEKS), t.truncatedTo(ChronoUnit.HOURS), Duration.of(5, ChronoUnit.MINUTES).
Metoda between a fiecărei unități numără câte unități întregi sunt între două valori: ChronoUnit.DAYS.between(a, b) dă numărul total de zile, ChronoUnit.MONTHS.between(a, b) numărul de luni complete. Rezultatul este negativ dacă b este înainte de a.
Unitatea trebuie să aibă sens pentru tipul dat: HOURS.between pe două LocalDate aruncă UnsupportedTemporalTypeException.
Parametri
| Parametru | Descriere |
|---|---|
start |
Valoarea de început. |
sfarsitExclusiv |
Valoarea de sfârșit, de același tip (sau convertibilă). |
Ce returnează
between returnează un long: numărul de unități întregi.
Exemple
Exemplul 1: Câte zile până la vacanță
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
LocalDate azi = LocalDate.of(2026, 10, 19);
LocalDate vacanta = LocalDate.of(2026, 12, 20);
System.out.println("Zile: " + ChronoUnit.DAYS.between(azi, vacanta));
System.out.println("Săptămâni: " + ChronoUnit.WEEKS.between(azi, vacanta));
System.out.println("Luni: " + ChronoUnit.MONTHS.between(azi, vacanta));
System.out.println("Invers: " + ChronoUnit.DAYS.between(vacanta, azi));
}
}
Rezultat
Zile: 62
Săptămâni: 8
Luni: 2
Invers: -62
Exemplul 2: Unitatea ca parametru
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
LocalDateTime t = LocalDateTime.of(2026, 10, 19, 14, 37, 20);
System.out.println(t.plus(3, ChronoUnit.WEEKS));
System.out.println(t.minus(1, ChronoUnit.DECADES));
System.out.println(t.truncatedTo(ChronoUnit.HOURS));
long minute = ChronoUnit.MINUTES.between(t, LocalDateTime.of(2026, 10, 19, 18, 0));
System.out.println("Minute până la 18:00: " + minute);
for (ChronoUnit u : new ChronoUnit[] {ChronoUnit.DAYS, ChronoUnit.MONTHS}) {
System.out.println(u + " durată estimată: " + u.getDuration() + ", estimată? " + u.isDurationEstimated());
}
}
}
Rezultat
2026-11-09T14:37:20
2016-10-19T14:37:20
2026-10-19T14:00
Minute până la 18:00: 202
Days durată estimată: PT24H, estimată? true
Months durată estimată: PT730H29M6S, estimată? true
Exemplul 3: Unitate nepotrivită
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.UnsupportedTemporalTypeException;
public class Main {
public static void main(String[] args) {
try {
ChronoUnit.HOURS.between(LocalDate.of(2026, 1, 1), LocalDate.of(2026, 1, 2));
} catch (UnsupportedTemporalTypeException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Eroare: Unsupported unit: Hours
Greșeli frecvente
- Te aștepți ca
MONTHS.between(31 ian, 28 feb)să dea 1. Luna nu este completă (ziua 28 < 31), deci rezultatul este 0. - Folosești
HOURSsauMINUTEScuLocalDate. O dată fără oră nu are ore.
Comenzi înrudite
Period.between: Calculează perioada dintre două date în ani, luni și zile; getYears, getMonths, getDays citesc fiecare parte.Duration.between: Calculează timpul exact dintre două momente (ore, minute, secunde); negativ dacă sfârșitul e înaintea startului.LocalDateTime.truncatedTo: Taie partea mai mică decât unitatea dată: truncatedTo(ChronoUnit.HOURS) face 14:37:52 → 14:00.TimeUnit: Enumerarea unităților de timp (SECONDS, MINUTES…) folosită la așteptări; face conversii și pauze ușor de citit.