私はずっと前に考案し、今日ブログに投稿したばかりの簡単な方法を使用しています。
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());
}
横画面でも構わないならワンライナーでもいいのですが…