Ce face Duration
Duration măsoară timpul în ore, minute, secunde și nanosecunde. Este potrivită pentru durata unui film, a unei ture de lucru sau a unei operații din program. O zi într-o Duration are mereu exact 24 de ore.
toString() folosește formatul ISO-8601: PT1H30M înseamnă „perioadă de timp (P, T) de 1 oră și 30 de minute”. Același format se citește cu Duration.parse. Pentru afișare prietenoasă folosești toHours(), toMinutesPart(), toSecondsPart().
Pentru ani, luni și zile din calendar (vârstă, abonament lunar) folosește Period. Duration este imutabilă, ca toate clasele java.time.
Ce returnează
Un obiect Duration.
Exemple
Exemplul 1: Creare și afișare
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration film = Duration.ofMinutes(142);
Duration pauza = Duration.parse("PT15M");
Duration total = film.plus(pauza);
System.out.println("Film: " + film + ", pauză: " + pauza + ", total: " + total);
System.out.printf("Total: %d ore și %d minute%n", total.toHours(), total.toMinutesPart());
System.out.println("O zi: " + Duration.ofDays(1));
}
}
Rezultat
Film: PT2H22M, pauză: PT15M, total: PT2H37M
Total: 2 ore și 37 minute
O zi: PT24H
Exemplul 2: Ore lucrate într-o săptămână
import java.time.Duration;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
String[][] pontaj = {{"08:55", "17:10"}, {"09:00", "16:45"}, {"08:30", "18:05"}};
Duration total = Duration.ZERO;
for (String[] zi : pontaj) {
Duration d = Duration.between(LocalTime.parse(zi[0]), LocalTime.parse(zi[1]));
System.out.println(zi[0] + " - " + zi[1] + ": " + d);
total = total.plus(d);
}
System.out.println("Total: " + total.toHours() + "h " + total.toMinutesPart() + "min");
}
}
Rezultat
08:55 - 17:10: PT8H15M
09:00 - 16:45: PT7H45M
08:30 - 18:05: PT9H35M
Total: 25h 35min
Exemplul 3: Compararea și semnul duratelor
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration a = Duration.ofSeconds(5400);
Duration b = Duration.ofMinutes(90);
System.out.println("Egale? " + a.equals(b));
System.out.println("compareTo: " + Duration.ofHours(2).compareTo(b));
Duration negativa = b.minus(Duration.ofHours(2));
System.out.println(negativa + " negativă? " + negativa.isNegative() + ", absolută: " + negativa.abs());
}
}
Rezultat
Egale? true
compareTo: 1
PT-30M negativă? true, absolută: PT30M
Greșeli frecvente
- Folosești
Duration.ofDays(30)pentru „o lună”. O lună de calendar nu are mereu 30 de zile; foloseștePeriod.ofMonths(1). - Afișezi
toMinutes()lângătoHours()și obții „2 ore și 142 minute”. Pentru restul de minute după ore foloseștetoMinutesPart().
Comenzi înrudite
Duration.between: Calculează timpul exact dintre două momente (ore, minute, secunde); negativ dacă sfârșitul e înaintea startului.Duration.ofMinutes: Creează o durată dintr-un număr de minute (ofMinutes) sau secunde (ofSeconds); 90 de minute devin PT1H30M.Duration.toMinutes: Transformă durata într-un număr total de minute (toMinutes) sau milisecunde (toMillis), tăind restul.Duration.plus: Adună două durate și returnează o durată nouă; există și minus, plusMinutes și multipliedBy.Period: O perioadă de calendar în ani, luni și zile (P1Y2M3D); se adună la date ținând cont de lungimea lunilor.ChronoUnit: Enumerarea unităților de timp (DAYS, MONTHS, HOURS…); ChronoUnit.DAYS.between(a, b) numără zilele dintre două date.