ChronoUnit în Java

Enumerarea unităților de timp (DAYS, MONTHS, HOURS…); ChronoUnit.DAYS.between(a, b) numără zilele dintre două date.

Sintaxă
import java.time.temporal.ChronoUnit;

enum ChronoUnit { NANOS, MICROS, MILLIS, SECONDS, MINUTES, HOURS, HALF_DAYS, DAYS, WEEKS, MONTHS, YEARS, DECADES, CENTURIES, MILLENNIA, ERAS, FOREVER }
long between(Temporal start, Temporal sfarsitExclusiv)

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 HOURS sau MINUTES cu LocalDate. 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.