fromTimeSpan function

Duration? fromTimeSpan(
  1. String? str
)

Implementation

Duration? fromTimeSpan(String? str) {
  if (str == null)
    return null;

  int days = 0;
  int hours = 0;
  int minutes = 0;
  int seconds = 0;
  double ms = 0.0;

  if (str[0] != "P")
    throw ArgumentError.value(str, "str", "not a valid XSD Duration");

  str = str.substring(1); //strip P
  var t = splitOnFirst(str, 'T');
  var hasTime = t.length == 2;

  var d = splitOnFirst(t[0], 'D');
  if (d.length == 2) {
    var day = int.tryParse(d[0]!) ?? null;
    if (day != null) {
      days = day;
    }
  }

  if (hasTime) {
    var h = splitOnFirst(t[1], 'H');
    if (h.length == 2) {
      var hour = int.tryParse(h[0]!) ?? null;
      if (hour != null) {
        hours = hour;
      }
    }

    var m = splitOnFirst(h[h.length - 1], 'M');
    if (m.length == 2) {
      var min = int.tryParse(m[0]!) ?? null;
      if (min != null) {
        minutes = min;
      }
    }

    var s = splitOnFirst(m[m.length - 1], 'S');
    if (s.length == 2) {
      var millis = double.tryParse(s[0]!) ?? null;
      if (millis != null) {
        ms = millis;
      }
    }

    seconds = ms.toInt();
    ms -= seconds;
  }

  return Duration(
      days: days,
      hours: hours,
      minutes: minutes,
      seconds: seconds,
      milliseconds: (ms * 1000).toInt());
}