date property

DateTime? get date

Implementation

DateTime? get date {
  final String raw = text.trim();
  final RegExpMatch? match = RegExp(r"D?:?(\d{4})(\d{2})?(\d{2})?(\d{2})?(\d{2})?(\d{2})?([+\-Z])?(\d{2})?'?(\d{2})?").firstMatch(raw);
  if (match == null) return null;
  final int year = int.tryParse(match.group(1) ?? "") ?? 0;
  if (year == 0) return null;
  final DateTime local = DateTime(
    year,
    int.tryParse(match.group(2) ?? "1") ?? 1,
    int.tryParse(match.group(3) ?? "1") ?? 1,
    int.tryParse(match.group(4) ?? "0") ?? 0,
    int.tryParse(match.group(5) ?? "0") ?? 0,
    int.tryParse(match.group(6) ?? "0") ?? 0,
  );
  final String sign = match.group(7) ?? "";
  if (sign.isEmpty || sign == "Z") return local;
  final int offsetHours = int.tryParse(match.group(8) ?? "0") ?? 0;
  final int offsetMinutes = int.tryParse(match.group(9) ?? "0") ?? 0;
  final Duration offset = Duration(hours: offsetHours, minutes: offsetMinutes);
  return sign == "+" ? local.subtract(offset) : local.add(offset);
}