Ce face Duration
Duration este o cantitate de timp, nu un moment: Duration(hours: 2, minutes: 30). Toți parametrii sunt opționali și se adună, iar valorile mari sunt permise: Duration(minutes: 150) este tot 2 ore și 30 de minute. Intern, durata este păstrată în microsecunde.
Duratele se adună (+), se scad (-), se înmulțesc cu un număr (*), se împart la un întreg (~/) și se compară (<, >, ==). Duration.zero este o constantă pentru durata 0, utilă ca valoare de pornire într-o sumă. toString() afișează H:MM:SS.mmmmmm.
O durată se folosește cu DateTime.add, se obține din difference și apare peste tot în programarea asincronă: Future.delayed(Duration(seconds: 1)), Timer, timeout-uri.
Parametri
| Parametru | Descriere |
|---|---|
days, hours, minutes, seconds, milliseconds, microseconds |
Componentele duratei (pot fi și negative); se adună. |
Ce returnează
Un obiect Duration (imutabil).
Exemple
Exemplul 1: Crearea și calculul duratelor
void main() {
var film = Duration(hours: 2, minutes: 15);
var reclame = Duration(minutes: 20);
print(film);
print(film + reclame);
print(Duration(minutes: 150));
print(Duration(minutes: 150) == Duration(hours: 2, minutes: 30));
print(reclame * 3);
print(film ~/ 3);
print(film > reclame);
print(Duration.zero);
}
Rezultat
2:15:00.000000
2:35:00.000000
2:30:00.000000
true
1:00:00.000000
0:45:00.000000
true
0:00:00.000000
Exemplul 2: Timpul total de antrenament
void main() {
var sesiuni = [
Duration(minutes: 45),
Duration(hours: 1, minutes: 10),
Duration(minutes: 30, seconds: 30),
];
var total = Duration.zero;
for (var s in sesiuni) {
total += s;
}
print('Total: $total');
print('Media pe sesiune: ${total ~/ sesiuni.length}');
var maxim = sesiuni.reduce((a, b) => a > b ? a : b);
print('Cea mai lungă: $maxim');
}
Rezultat
Total: 2:25:30.000000
Media pe sesiune: 0:48:30.000000
Cea mai lungă: 1:10:00.000000
Greșeli frecvente
- Cauți
Duration(months: 1)sauDuration(years: 1). Nu există, pentru că lunile și anii au lungimi diferite. - Împarți cu
/:durata / 2nu compilează. Folosește împărțirea întreagă~/.
Comenzi înrudite
Duration.inDays: Dau durata întreagă exprimată într-o singură unitate: zile, ore, minute, secunde sau milisecunde (rotunjit spre zero).Duration.isNegative: Spune dacă durata este mai mică decât zero, de exemplu rezultatul unei diferențe cu o dată din viitor.DateTime.add: Returnează o dată nouă, mutată înainte (add) sau înapoi (subtract) cu o durată dată.DateTime.difference: Calculează timpul dintre două date, ca Duration: this minus other.Stopwatch.elapsed: Timpul măsurat de cronometru: ca Duration (elapsed) sau ca număr de milisecunde (elapsedMilliseconds).