estoy usando un método sencillo que ideé hace mucho tiempo y acaba de publicar hoy a mi blog:
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);
}
}
Esto puede manejar una gran cantidad más situaciones que las soluciones más simples proporcionados antes, pero tiene su propias deficiencias. Lo discuto más lejos here.
Ahora, si estás en .NET 4 se puede acortar la ejecución ToTimeSpan a:
public static TimeSpan ToTimeSpan(this string s)
{
return TimeSpan.FromMilliseconds(s.Split('.', ':')
.Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}
Incluso puede que sea una sola línea si no les importa usar estado horizontal de la pantalla ..
¿Es necesario apoyar la localización? (por ejemplo, 30.15 de acuerdo con la configuración de idioma) –
El formato siempre será hh: mm, pero hh puede ser> 24. – jlp
Ver esta [pregunta] (http://stackoverflow.com/questions/26760/c-parse-string -to-timespan) (duplicado). – Ando