fromTimeSpan function
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());
}