Я использую простой метод, который я разработал давным-давно и только что опубликовал сегодня в своем блоге:
public static class TimeSpanExtensions
{
static int[] weights = { 60 * 60 * 1000, 60 * 1000, 1000, 1 };
public static TimeSpan ToTimeSpan(this string s)
{
string[] parts = s.Split('.', ':');
long ms = 0;
for (int i = 0; i < parts.Length && i < weights.Length; i++)
ms += Convert.ToInt64(parts[i]) * weights[i];
return TimeSpan.FromMilliseconds(ms);
}
}
Это может справиться с гораздо большим количеством ситуаций, чем простые решения, представленные ранее, но имеет свои недостатки. Я обсуждаю это далее здесь .
Теперь, если вы находитесь в .NET 4, вы можете сократить реализацию ToTimeSpan до:
public static TimeSpan ToTimeSpan(this string s)
{
return TimeSpan.FromMilliseconds(s.Split('.', ':')
.Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}
Вы даже можете сделать его однострочным, если не возражаете против использования горизонтального состояния экрана ...