Ce face Duration.between
Duration.between(start, sfarsit) calculează cât timp trece între două valori cu oră: LocalTime, LocalDateTime, ZonedDateTime sau Instant. Rezultatul este pozitiv dacă sfarsit este după start și negativ altfel.
Cele două valori trebuie să fie de tipuri compatibile. Cu LocalDate (fără oră) metoda aruncă UnsupportedTemporalTypeException; pentru zile între date folosește ChronoUnit.DAYS.between sau Period.between.
Cu ZonedDateTime sau Instant se ține cont de ora de vară. Cu LocalDateTime nu, pentru că nu are fus orar.
Parametri
| Parametru | Descriere |
|---|---|
start |
Momentul de început (inclus). |
sfarsitExclusiv |
Momentul de sfârșit. |
Ce returnează
Un Duration.
Exemple
Exemplul 1: Cât a durat călătoria
import java.time.Duration;
import java.time.LocalDateTime;
public class Main {
public static void main(String[] args) {
LocalDateTime plecare = LocalDateTime.of(2026, 10, 19, 22, 40);
LocalDateTime sosire = LocalDateTime.of(2026, 10, 20, 6, 15);
Duration d = Duration.between(plecare, sosire);
System.out.println("Durata: " + d);
System.out.println("Adică " + d.toHours() + " ore și " + d.toMinutesPart() + " minute");
System.out.println("Invers: " + Duration.between(sosire, plecare));
}
}
Rezultat
Durata: PT7H35M
Adică 7 ore și 35 minute
Invers: PT-7H-35M
Exemplul 2: Timp rămas până la închidere
import java.time.Duration;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
LocalTime inchidere = LocalTime.of(20, 0);
for (String s : new String[] {"18:25", "19:58", "20:10"}) {
Duration ramas = Duration.between(LocalTime.parse(s), inchidere);
if (ramas.isNegative()) {
System.out.println(s + ": închis");
} else {
System.out.println(s + ": mai sunt " + ramas.toMinutes() + " minute");
}
}
}
}
Rezultat
18:25: mai sunt 95 minute
19:58: mai sunt 2 minute
20:10: închis
Exemplul 3: LocalDate nu are oră
import java.time.Duration;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.UnsupportedTemporalTypeException;
public class Main {
public static void main(String[] args) {
LocalDate a = LocalDate.of(2026, 10, 19);
LocalDate b = LocalDate.of(2026, 12, 25);
try {
System.out.println(Duration.between(a, b));
} catch (UnsupportedTemporalTypeException e) {
System.out.println("Eroare: " + e.getMessage());
}
System.out.println("Zile până la Crăciun: " + ChronoUnit.DAYS.between(a, b));
System.out.println("Ca durată: " + Duration.between(a.atStartOfDay(), b.atStartOfDay()));
}
}
Rezultat
Eroare: Unsupported unit: Seconds
Zile până la Crăciun: 67
Ca durată: PT1608H
Greșeli frecvente
- Dai două
LocalDate. AruncăUnsupportedTemporalTypeException; foloseșteChronoUnit.DAYS.betweensauatStartOfDay(). - Amesteci tipuri:
Duration.between(localTime, localDateTime)aruncăDateTimeException, pentru că o oră fără dată nu poate fi comparată cu o dată.
Comenzi înrudite
Duration: O cantitate de timp exactă, în secunde și nanosecunde (1 oră și 30 de minute); se afișează ca PT1H30M.ChronoUnit: Enumerarea unităților de timp (DAYS, MONTHS, HOURS…); ChronoUnit.DAYS.between(a, b) numără zilele dintre două date.Period.between: Calculează perioada dintre două date în ani, luni și zile; getYears, getMonths, getDays citesc fiecare parte.Instant: Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.Duration.toMinutes: Transformă durata într-un număr total de minute (toMinutes) sau milisecunde (toMillis), tăind restul.