sto usando un metodo semplice che ho ideato un molto tempo fa e appena postato oggi sul mio 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);
}
}
Questo in grado di gestire molte più situazioni rispetto alle soluzioni più semplici fornite prima, ma ha il suo proprie carenze. Ne discuto ulteriormente here.
Ora, se siete in .NET 4 è possibile abbreviare l'implementazione ToTimeSpan a:
public static TimeSpan ToTimeSpan(this string s)
{
return TimeSpan.FromMilliseconds(s.Split('.', ':')
.Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}
Si può anche fare un one-liner, se non ti dispiace utilizzando state orizzontale dello schermo ..
Ha bisogno di supportare la localizzazione? (ad esempio 30.15 in base alle impostazioni della lingua) –
Il formato sarà sempre hh: mm ma hh potrebbe essere> 24. – jlp
Vedere questa [domanda] (http://stackoverflow.com/questions/26760/c-parse-string -to-timespan) (duplicato). – Ando