Ce face Duration.toMinutes
toMinutes() returnează numărul total de minute întregi din durată: pentru 2 ore și 5 minute dă 125. Restul de secunde se pierde (nu se rotunjește). La fel, toMillis() dă totalul de milisecunde, toHours() totalul de ore.
Pentru afișări de tip „2 ore și 5 minute” folosești metodele …Part() (Java 9): toHoursPart(), toMinutesPart() (0-59), toSecondsPart() (0-59), toMillisPart().
toMillis() aruncă ArithmeticException doar pentru durate uriașe (peste 292 de milioane de ani), care nu încap într-un long.
Ce returnează
Un long cu totalul în unitatea cerută (sau int pentru metodele …Part).
Exemple
Exemplul 1: Total față de parte
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration d = Duration.ofSeconds(7_545); // 2 ore, 5 minute, 45 secunde
System.out.println("Durata: " + d);
System.out.println("toHours: " + d.toHours());
System.out.println("toMinutes: " + d.toMinutes());
System.out.println("toMillis: " + d.toMillis());
System.out.println("Afișat: " + d.toHoursPart() + "h " + d.toMinutesPart() + "m " + d.toSecondsPart() + "s");
}
}
Rezultat
Durata: PT2H5M45S
toHours: 2
toMinutes: 125
toMillis: 7545000
Afișat: 2h 5m 45s
Exemplul 2: Cost pe minut la un apel
Minutele începute se plătesc întregi, deci rotunjim în sus dacă au rămas secunde.
import java.time.Duration;
import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
Duration apel = Duration.between(LocalTime.of(10, 2, 10), LocalTime.of(10, 9, 35));
long minute = apel.toMinutes() + (apel.toSecondsPart() > 0 ? 1 : 0);
System.out.println("Apelul a durat " + apel.toMinutes() + " min " + apel.toSecondsPart() + " s");
System.out.println("Minute facturate: " + minute + ", cost: " + minute * 0.25 + " lei");
System.out.println("În milisecunde: " + apel.toMillis());
}
}
Rezultat
Apelul a durat 7 min 25 s
Minute facturate: 8, cost: 2.0 lei
În milisecunde: 445000
Greșeli frecvente
- Te aștepți ca
toMinutes()să rotunjească. 4 minute și 59 de secunde dau 4. - Combini
toHours()cutoMinutes()în același text. Al doilea este totalul, nu restul; foloseștetoMinutesPart().
Comenzi înrudite
Duration: O cantitate de timp exactă, în secunde și nanosecunde (1 oră și 30 de minute); se afișează ca PT1H30M.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.Instant.ofEpochSecond: Transformă un timestamp Unix (secunde de la 1970) în Instant; toEpochMilli face drumul invers, în milisecunde.