tryParseTime static method
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);
}