Timespan fails for example with '47:50' (overflow, I don't know why). My answer:
function GetSecondsFromString(ATimeString: string): Double;
var
arr: TStringdynArray;
J, I: Integer;
tf: TFormatSettings;
begin
Result:= 0;
arr:= StrUtils.SplitString(ATimeString, ':');
I:= High(arr);
if I < 1 then
exit;
if I = 2 then
begin
if StrTointDef(arr[0], 0) > 23 then
exit;
Result:= StrtoIntDef(arr[0], 0) * 3600;
end;
Result:= Result + (StrToIntDef(arr[I - 1], 0) * 60);
J:= Pos('.', arr[I]);
if (J > 1) and (J < arr[I].Length) then
begin
tf:= TFormatSettings.Create;
tf.DecimalSeparator:= '.';
Result:= Result + StrToFloat('0' + Copy(arr[I], Pos('.', arr[I])), tf);
arr[I]:= Copy(arr[I], 1, Pos('.', arr[I]) - 1);
end;
Result:= Result + StrToIntDef(arr[I], 0);
end;