Time.parse constructor

Time.parse(
  1. String s, {
  2. bool allowFromBytes = true,
})

Parses s to Time.

Implementation

factory Time.parse(String s, {bool allowFromBytes = true}) {
  s = s.trim();
  if (s.isEmpty) {
    throw FormatException('Invalid `Time` format: $s');
  }

  var idx1 = s.indexOf(':');
  var idx2 = s.indexOf('.');

  if (idx1 != 2 || (idx2 > 0 && idx2 < idx1)) {
    if (allowFromBytes) {
      var bs = _string2bytes(s);
      return Time.fromBytes(bs, allowParseString: false);
    }

    throw FormatException('Invalid `Time` format: $s');
  }

  int ms = 0;
  int mic = 0;

  String hmsStr;
  if (idx2 >= 0) {
    hmsStr = s.substring(0, idx2).trim();
    var msMicStr = s.substring(idx2 + 1).trim();

    if (msMicStr.length <= 3) {
      ms = int.parse(msMicStr);
    } else {
      var msEnd = msMicStr.length - 3;
      var msStr = msMicStr.substring(0, msEnd);
      var micStr = msMicStr.substring(msEnd);

      ms = int.parse(msStr);
      mic = int.parse(micStr);
    }
  } else {
    hmsStr = s;
  }

  var parts = hmsStr.split(':');

  var hStr = parts[0].trim();
  var mStr = (parts.length > 1 ? parts[1] : '0').trim();
  var secStr = (parts.length > 2 ? parts[2] : '0').trim();

  var h = int.parse(hStr);
  var m = int.parse(mStr);
  var sec = int.parse(secStr);

  return Time(h, m, sec, ms, mic);
}