tryParseTime static method

XPathDateTime? tryParseTime(
  1. String value
)

Attempts to parse a string representation of a time.

Implementation

static XPathDateTime? tryParseTime(String value) {
  final match = _timeRegExp.firstMatch(value);
  if (match == null) return null;

  final tzStr = match.namedGroup('timezone');
  final offset = _parseTimezoneOffsetMinutes(tzStr);
  if (tzStr != null && offset == null) return null;

  final hr = int.tryParse(match.namedGroup('hour') ?? '');
  if (hr == null) return null;

  final mn = int.tryParse(match.namedGroup('minute') ?? '');
  if (mn == null) return null;

  final scDouble = double.tryParse(match.namedGroup('second') ?? '');
  if (scDouble == null) return null;

  final sc = scDouble.truncate();
  final frac = scDouble - sc;
  final ms = (frac * 1000).truncate();
  final us = ((frac * 1000000) - (ms * 1000)).round();

  if (!_validateDateTime(1970, 1, 1, hr, mn, scDouble)) return null;

  if (hr == 24) {
    return const XPathDateTime.time(0, 0, 0, 0, 0, null);
  }

  return XPathDateTime.time(hr, mn, sc, ms, us, offset);
}