DateTime.parse în Dart

Date și timp (DateTime, Duration, Stopwatch) Dart 1.0 (tryParse: Dart 2.0)

Transformă un text în format ISO 8601 (2026-10-19 14:30) într-un DateTime; tryParse dă null la text greșit.

Sintaxă
static DateTime parse(String formattedString)
static DateTime? tryParse(String formattedString)

Ce face DateTime.parse

DateTime.parse înțelege formatul standard ISO 8601 și variante apropiate: '2026-10-19', '2026-10-19 14:30', '2026-10-19T14:30:00', '20261019'. Dacă textul se termină cu Z sau are un decalaj (+03:00), rezultatul este în UTC; altfel este în ora locală.

La un text pe care nu-l înțelege, parse aruncă FormatException, iar tryParse returnează null. Formatul românesc 19.10.2026 nu este acceptat: îl desfaci singur, cu split('.'), sau folosești pachetul intl.

Valorile în afara intervalului sunt reportate, ca la constructor: '2026-02-30' devine 2 martie, fără eroare.

Parametri

Parametru Descriere
formattedString Textul cu data, în format ISO 8601.

Ce returnează

parse: un DateTime. tryParse: un DateTime?.

Exemple

Exemplul 1: Formate acceptate

void main() {
  print(DateTime.parse('2026-10-19'));
  print(DateTime.parse('2026-10-19 14:30'));
  print(DateTime.parse('2026-10-19T14:30:15.250'));
  print(DateTime.parse('20261019T143000'));
  var utc = DateTime.parse('2026-10-19T11:30:00Z');
  print('$utc ${utc.isUtc}');
  print(DateTime.parse('2026-10-19T14:30:00+03:00'));
  print(DateTime.parse('2026-02-30'));
}

Rezultat

2026-10-19 00:00:00.000
2026-10-19 14:30:00.000
2026-10-19 14:30:15.250
2026-10-19 14:30:00.000
2026-10-19 11:30:00.000Z true
2026-10-19 11:30:00.000Z
2026-03-02 00:00:00.000

Exemplul 2: Text greșit: tryParse și formatul românesc

DateTime? dinFormatRomanesc(String s) {
  var p = s.split('.');
  if (p.length != 3) return null;
  var zi = p[0].padLeft(2, '0'), luna = p[1].padLeft(2, '0');
  return DateTime.tryParse('${p[2]}-$luna-$zi');
}

void main() {
  for (var t in ['2026-10-19', '19.10.2026', 'mâine']) {
    print('$t → ${DateTime.tryParse(t)}');
  }
  print(dinFormatRomanesc('19.10.2026'));
  print(dinFormatRomanesc('1.3.2026'));
  try {
    DateTime.parse('19/10/2026');
  } on FormatException catch (e) {
    print('Eroare: ${e.message}');
  }
}

Rezultat

2026-10-19 → 2026-10-19 00:00:00.000
19.10.2026 → null
mâine → null
2026-10-19 00:00:00.000
2026-03-01 00:00:00.000
Eroare: Invalid date format

Greșeli frecvente

  • Te aștepți ca parse să respingă '2026-02-30'. Data este reportată la 2 martie; dacă vrei validare, compară ziua rezultatului cu cea din text.
  • Uiți că un text cu Z dă o dată UTC: hour va fi ora UTC, nu cea locală. Apelează toLocal() pentru afișare.

Comenzi înrudite

  • DateTime.toIso8601String: Scrie data ca text în formatul standard ISO 8601 (2026-10-19T14:30:00.000), bun pentru JSON și fișiere.
  • DateTime: Un moment în timp (dată și oră), în fusul orar local sau în UTC. Constructorul creează o dată locală.
  • FormatException: Excepția aruncată când un text nu are formatul așteptat (int.parse(‘abc’), JSON greșit, dată invalidă).
  • int.parse: Transformă un text în număr întreg; parse aruncă FormatException la text greșit, tryParse returnează null.