parseInfo top-level property

List<ParseInfo> parseInfo
final

ParseInfo holds the data of all date formats supported and how to parse them the order of this list important because some regular expression could match different values.

dates reference: https://en.wikipedia.org/wiki/ISO_8601

Implementation

final List<ParseInfo> parseInfo = [
  ParseInfo(
    'invalid RFC 822 (no seconds)',
    RegExp(r'^\d{2}\s\w{3}\s\d{4}\s\d\d:\d\d\s[GMTUTC]*$'),
    'd MMM yyy H:mm',
  ),

  ParseInfo(
    'valid RFC 822 (4-digit year) no seconds, offset with letters',
    RegExp(r'\w{3},\s\d{2}\s\w{3}\s\d{4}\s\d\d:\d\d\s([GMTUTC])*'),
    'EEE, d MMM yyyy H:mm',
  ),

  ParseInfo(
    'valid RFC 822 (4-digit year) offset with digits',
    RegExp(r'\w{3},\s\d{2}\s\w{3}\s\d{4}\s([\d:])*\s([+\-]\d{4})'),
    'EEE, d MMM yyyy H:mm:s',
    cb: parseWithNumericTz,
  ),

  ParseInfo(
    'valid RFC 822 (2-digit year)',
    RegExp(r'\w{3},\s\d{2}\s\w{3}\s\d{2}\s([\d:])*\s([GMTUTC])*'),
    'EEE, d MMM yy H:mm:s',
  ),

  ParseInfo(
    'valid RFC 822 (4-digit year) offset with letters',
    RegExp(r'\w{3},\s\d{2}\s\w{3}\s\d{4}\s([\d:])*\s([A-Z]{3,4})'),
    'EEE, d MMM yyyy H:mm:s',
    cb: parseWithNamedTz,
  ),

  // _ParseInfo(
  //   'ascii time',
  //   RegExp(r'\w{3}\s\w{3}\s\d{1,2}\s\d\d:\d\d:\d\d\s\w{3}\s\d{4}'),
  //   'EEE MMM d H:mm:s Z yyyy',
  // ),

  ParseInfo(
    'invalid RFC 822 (no time)',
    RegExp(r'^\d{2}\s\w{3}\s\d{4}$'),
    'd MMM yyyy',
  ),
  ParseInfo(
    'valid W3CDTF (yyyy-mm)',
    RegExp(r'^\d{4}-\d{2}$'),
    'yyyy-MM',
  ),
  // valid ISO 8601 (-yymm) -- deprecated on ISO 8601:2004
  ParseInfo(
    'valid W3CDTF (yyyy)',
    RegExp(r'^\d{4}$'),
    'yyyy',
  ),
  // valid W3CDTF (yyyy-mm-dd) (internal parser)
  // valid ISO 8601 (yyyymmdd) (internal parser)
  ParseInfo(
    'valid ISO 8601 (-yy-mm)',
    RegExp(r'^-\d{2}-\d{2}$'),
    '-yy-MM',
  ),
  // valid ISO 8601 (yymmdd) -- deprecated on ISO 8601:2004
  ParseInfo(
    'bogus RFC 822 (invalid month)',
    RegExp(r'\w{3},\s\d{2}\s\w{3,10}\s\d{4}\s([\d:])*\s\w{3}'),
    'EEE, d MMMM yyyy H:mm:s',
  ),

  ParseInfo(
    'invalid RFC 822 with a Z at the end',
    RegExp(r'^\w{3},\s\d{2}\s\w{3}\s\d{4}\s([\d:])*\sZ$'),
    'EEE, d MMM yyyy H:mm:s',
  ),
];