DateTime.fromMillisecondsSinceEpoch în Dart

Transformă între un DateTime și numărul de milisecunde trecute de la 1 ianuarie 1970, ora 00:00 UTC.

Sintaxă
DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch, {bool isUtc = false})
int get millisecondsSinceEpoch

Ce face DateTime.fromMillisecondsSinceEpoch

Multe sisteme (baze de date, API-uri, JavaScript) păstrează momentele ca un singur număr: milisecunde trecute de la epoca Unix, 1 ianuarie 1970, 00:00 UTC. millisecondsSinceEpoch îți dă acest număr pentru o dată, iar DateTime.fromMillisecondsSinceEpoch(n) face drumul invers.

Numărul nu depinde de fusul orar: același moment are același număr peste tot. Constructorul creează implicit o dată locală; cu isUtc: true o creează în UTC. Dacă primești secunde (timestamp Unix clasic), înmulțește cu 1000. Există și variantele cu microsecunde: microsecondsSinceEpoch și fromMicrosecondsSinceEpoch.

Parametri

Parametru Descriere
millisecondsSinceEpoch Milisecundele de la 1970-01-01 00:00 UTC (pot fi negative, pentru date mai vechi).
isUtc true pentru o dată UTC; implicit locală.

Ce returnează

Constructorul: un DateTime. Proprietatea: un int.

Exemple

Exemplul 1: De la număr la dată și înapoi

void main() {
  var d = DateTime.utc(2026, 10, 19, 11, 30);
  var ms = d.millisecondsSinceEpoch;
  print(ms);
  print(DateTime.fromMillisecondsSinceEpoch(ms, isUtc: true));
  print(DateTime.fromMillisecondsSinceEpoch(0, isUtc: true));
  print(DateTime.fromMillisecondsSinceEpoch(-86400000, isUtc: true));
  var local = DateTime.fromMillisecondsSinceEpoch(ms);
  print(local.isUtc);
  print(local.millisecondsSinceEpoch == ms);
}

Rezultat

1792409400000
2026-10-19 11:30:00.000Z
1970-01-01 00:00:00.000Z
1969-12-31 00:00:00.000Z
false
true

Exemplul 2: Timestamp Unix în secunde

Un API trimite timpul în secunde; îl transformăm în milisecunde și calculăm câte zile au trecut între două comenzi.

void main() {
  var comenzi = {'#1001': 1790000000, '#1002': 1792420200};
  var date = comenzi.map((id, sec) =>
      MapEntry(id, DateTime.fromMillisecondsSinceEpoch(sec * 1000, isUtc: true)));
  date.forEach((id, d) => print('$id: ${d.toIso8601String()}'));
  var zile = date['#1002']!.difference(date['#1001']!).inDays;
  print('Între comenzi au trecut $zile zile');
}

Rezultat

#1001: 2026-09-21T14:13:20.000Z
#1002: 2026-10-19T14:30:00.000Z
Între comenzi au trecut 28 zile

Greșeli frecvente

  • Dai secunde în loc de milisecunde și primești o dată din ianuarie 1970. Înmulțește timestamp-ul Unix cu 1000.

Comenzi înrudite

  • DateTime.utc: DateTime.utc creează o dată în UTC; toUtc și toLocal transformă același moment între UTC și ora locală.
  • DateTime: Un moment în timp (dată și oră), în fusul orar local sau în UTC. Constructorul creează o dată locală.
  • DateTime.difference: Calculează timpul dintre două date, ca Duration: this minus other.