2008-08-25 54 views

Trả lời

26

Điều này dường như làm việc, mặc dù nó là một chút hackish:

TimeSpan span; 


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span)) 
      MessageBox.Show(span.ToString()); 
+15

tôi sẽ đề nghị sử dụng có lẽ 'TimeSpan.TryParse ("hh'h: 'mm'm'", ra khoảng) 'kiếm một giải pháp sạch hơn và mạnh mẽ hơn – mike

+2

Trừ khi chuỗi là 25 h: 30m –

+1

lưu ý: giải pháp này được giới hạn ở 23h: 59m – fubo

1

Are TimeSpan.ParseTimeSpan.TryParse không lựa chọn? Nếu bạn không sử dụng định dạng "được phê duyệt", bạn sẽ cần thực hiện phân tích cú pháp theo cách thủ công. Tôi có lẽ sẽ nắm bắt hai giá trị số nguyên của bạn trong một biểu thức chính quy, và sau đó cố gắng phân tích chúng thành số nguyên, từ đó bạn có thể tạo một TimeSpan mới với hàm tạo của nó.

6

DateTime.ParseExact hoặc DateTime.TryParseExact cho phép bạn chỉ định định dạng chính xác của đầu vào. Sau khi bạn nhận được DateTime, bạn có thể lấy số DateTime.TimeOfDayTimeSpan.

Trong trường hợp không có TimeSpan.TryParseExact, tôi nghĩ rằng một giải pháp 'thanh lịch' đã hết.

@buyutec Như bạn nghi ngờ, phương pháp này sẽ không hoạt động nếu khoảng thời gian kéo dài hơn 24 giờ.

+0

[TimeSpan.TryParseExact] (http://msdn.microsoft.com/ en-us/library/system.timespan.tryparseexact% 28v = vs.100% 29.aspx) đã được thêm vào trong .NET 4.0. –

2

Here'e một khả năng:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 

Và nếu bạn muốn làm cho nó thêm thanh lịch trong mã của bạn, sử dụng một phương pháp khuyến nông:

public static TimeSpan ToTimeSpan(this string s) 
{ 
    TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 
    return t; 
} 

Sau đó, bạn có thể làm

"05h:30m".ToTimeSpan(); 
+0

Còn về 'TimeSpan.TryParse (" hh'h: 'mm'm' ", out span) '? https://stackoverflow.com/a/26769/206730 – Kiquenet

Các vấn đề liên quan