DateTime.utc în Dart

DateTime.utc creează o dată în UTC; toUtc și toLocal transformă același moment între UTC și ora locală.

Sintaxă
DateTime.utc(int year, [int month = 1, int day = 1, int hour = 0, int minute = 0,
    int second = 0, int millisecond = 0, int microsecond = 0])
DateTime toUtc()
DateTime toLocal()

Ce face DateTime.utc

UTC este ora de referință a lumii, fără ora de vară. DateTime.utc(2026, 10, 19, 12) creează ora 12:00 UTC; are aceiași parametri ca constructorul obișnuit. Proprietatea isUtc spune în ce fel este o dată, iar toString() adaugă un Z la final pentru UTC.

toUtc() și toLocal() nu schimbă momentul, ci doar felul în care este exprimat. 15:00 în București vara (UTC+3) este același moment cu 12:00 UTC: millisecondsSinceEpoch rămâne identic, doar hour diferă.

Regula practică: salvează și trimite datele în UTC (în baze de date, API-uri, fișiere), iar pentru afișare transformă-le cu toLocal(). Calculele cu zile întregi sunt mai sigure în UTC, unde nu există trecerea la ora de vară.

Parametri

Parametru Descriere
year, month, day, ... Componentele datei, în UTC.

Ce returnează

Un DateTime (UTC pentru utc și toUtc, local pentru toLocal).

Exemple

Exemplul 1: Același moment, exprimat diferit

Rezultatul depinde de fusul orar al calculatorului; exemplul de mai jos a rulat în București (EEST, UTC+3).

void main() {
  var utc = DateTime.utc(2026, 10, 19, 12, 0);
  var local = utc.toLocal();
  print(utc);
  print(local);
  print(local.timeZoneName);
  print(local.timeZoneOffset);
  print(utc.millisecondsSinceEpoch == local.millisecondsSinceEpoch);
}

Rezultat posibil (diferă la fiecare rulare)

2026-10-19 12:00:00.000Z
2026-10-19 15:00:00.000
EEST
3:00:00.000000
true

Exemplul 2: Dus-întors între UTC și local

Aceste rezultate nu depind de fusul orar: momentul se păstrează la fiecare transformare.

void main() {
  var plecare = DateTime.utc(2026, 7, 1, 6, 45);
  print(plecare);
  print(plecare.isUtc);
  var local = plecare.toLocal();
  print(local.isUtc);
  var inapoi = local.toUtc();
  print(inapoi);
  print(inapoi == plecare);
  print(local.isAtSameMomentAs(plecare));
}

Rezultat

2026-07-01 06:45:00.000Z
true
false
2026-07-01 06:45:00.000Z
true
true

Greșeli frecvente

  • Compari o dată UTC cu una locală cu == și primești false, deși e același moment. == ține cont și de fusul orar; folosește isAtSameMomentAs.
  • Adaugi manual 2 sau 3 ore ca să „transformi” în ora României. Folosește toLocal(), care știe de ora de vară.

Comenzi înrudite

  • DateTime: Un moment în timp (dată și oră), în fusul orar local sau în UTC. Constructorul creează o dată locală.
  • DateTime.isBefore: Compară două date: este înainte (isBefore), după (isAfter) sau exact în același moment (isAtSameMomentAs)?
  • DateTime.fromMillisecondsSinceEpoch: Transformă între un DateTime și numărul de milisecunde trecute de la 1 ianuarie 1970, ora 00:00 UTC.
  • DateTime.now: Creează un DateTime cu data și ora curente, în fusul orar local al calculatorului.