Duration în Dart

Un interval de timp (de exemplu 2 ore și 30 de minute), independent de calendar; Duration.zero este durata 0.

Sintaxă
const Duration({int days = 0, int hours = 0, int minutes = 0, int seconds = 0,
    int milliseconds = 0, int microseconds = 0})
static const Duration zero

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) sau Duration(years: 1). Nu există, pentru că lunile și anii au lungimi diferite.
  • Împarți cu /: durata / 2 nu 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).