您可以使用此方法:
public static TimeSpan? TryParseTimeSpan(string input)
{
TimeSpan? ts = (TimeSpan?)null;
if (!string.IsNullOrWhiteSpace(input))
{
input = input.Trim();
int length = input.Length % 2 == 0 ? input.Length : input.Length + 1;
int count = length / 2;
if(count > 3) return null;
input = input.PadLeft(count * 2, '0');
string[] validFormats = new[] { "HHmmss", "mmss", "ss" };
DateTime dt;
if (DateTime.TryParseExact(input, validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
ts = dt.TimeOfDay;
}
return ts;
}
但是,它不接受 89 秒的第二部分,这不是有效的输入(恕我直言)。
使用此示例输入进行测试:
List<string> inputs = new List<string> { "78", "10545", "5" };
IEnumerable<TimeSpan> timeSpans = inputs
.Select(i => TryParseTimeSpan(i))
.Where(ts => ts.HasValue)
.Select(ts => ts.Value);
foreach (TimeSpan ts in timeSpans)
Console.WriteLine(ts.ToString());
DEMO
输出:
01:05:45
00:00:05