Tôi đang sử dụng một phương pháp đơn giản mà tôi nghĩ ra một thời gian dài trước đây và chỉ đăng tải ngày hôm nay để blog của tôi:
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);
}
}
này có thể xử lý tình huống rất nhiều so với các giải pháp đơn giản hơn được cung cấp trước đó, nhưng có của nó thiếu sót riêng. Tôi thảo luận thêm về nó here.
Bây giờ, nếu bạn đang ở trong .NET 4 bạn có thể rút ngắn thời thực hiện ToTimeSpan tới:
public static TimeSpan ToTimeSpan(this string s)
{
return TimeSpan.FromMilliseconds(s.Split('.', ':')
.Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}
Bạn thậm chí có thể làm cho nó một one-liner nếu bạn không nhớ sử dụng trạng thái màn hình ngang .. .
hiện nó cần phải hỗ trợ nội địa hóa? (ví dụ: 30,15 theo cài đặt ngôn ngữ) –
Định dạng sẽ luôn là hh: mm nhưng hh có thể xảy ra> 24. – jlp
Xem [câu hỏi này] (http://stackoverflow.com/questions/26760/c-parse-string -to-timespan) (trùng lặp). – Ando