Używam prosty sposób, że wymyślił dawno temu i po prostu pisał dzisiaj na moim blogu:
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);
}
}
To może obsłużyć o wiele więcej sytuacji niż prostszych rozwiązań przewidzianych wcześniej, ale ma swoje własne niedociągnięcia. Omówię to dalej: here.
Teraz, jeśli jesteś w .NET 4 można skrócić realizację ToTimeSpan do:
public static TimeSpan ToTimeSpan(this string s)
{
return TimeSpan.FromMilliseconds(s.Split('.', ':')
.Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}
Można nawet uczynić go jedną wkładkę, jeśli nie przeszkadza stan poziomego ekranu ..
to trzeba wspierać lokalizację? (np. 30.15 zgodnie z ustawieniami językowymi) –
Format będzie zawsze hh: mm, ale hh może być> 24. – jlp
Zobacz to [pytanie] (http://stackoverflow.com/questions/26760/c-parse-string do czasu) (duplikat). – Ando