parse static method

FdcTime parse(
  1. String text
)

Parses HH:mm, HH:mm:ss, or HH:mm:ss.fffffff.

Fractional seconds accept 1..7 digits and are right-padded to SQL Server time(7) 100ns precision.

Implementation

static FdcTime parse(String text) {
  final trimmed = text.trim();
  final match = RegExp(
    r'^(\d{1,2}):(\d{2})(?::(\d{2})(?:\.(\d{1,7}))?)?$',
  ).firstMatch(trimmed);
  if (match == null) {
    throw FormatException('Invalid FdcTime value.', text);
  }

  final hour = int.parse(match.group(1)!);
  final minute = int.parse(match.group(2)!);
  final second = int.parse(match.group(3) ?? '0');
  final fractionText = (match.group(4) ?? '').padRight(7, '0');
  final fractionTicks = fractionText.isEmpty ? 0 : int.parse(fractionText);

  _checkRange(hour, 0, 23, 'hour');
  _checkRange(minute, 0, 59, 'minute');
  _checkRange(second, 0, 59, 'second');

  return FdcTime._(
    hour * ticksPerHour +
        minute * ticksPerMinute +
        second * ticksPerSecond +
        fractionTicks,
  );
}