2013-07-09 59 views
15

Tôi muốn đạt được trò chuyện của this, nghĩa là, tôi muốn chuyển đổi một string với định dạng hh:mm tt thành TimeSpan với số giây không bằng 0. Ví dụ, 09:45 pm được chuyển đổi thành 21:45:00.AM/PM để TimeSpan

+1

Một 'TimeSpan' không có định dạng. –

Trả lời

48

Cách tiếp cận đơn giản nhất có thể là phân tích cú pháp dưới dạng DateTime sử dụng DateTime.ParseExact và sau đó sử dụng TimeOfDay để chính xác số TimeSpan.

DateTime dateTime = DateTime.ParseExact(text, 
            "hh:mm tt", CultureInfo.InvariantCulture); 
TimeSpan span = dateTime.TimeOfDay; 

Đó là lẻ để xem 0 hàng đầu về một số giờ khi bạn đang cũng chỉ định một sáng/chiều vấn thiết kế mặc dù. Bạn có thể muốn "h" thay vì "hh" trong chuỗi định dạng, để cho phép "9:45 chiều" thay vì "09:45 chiều".

(Tôi cũng cho rằng đó là việc sử dụng lạ TimeSpan ở vị trí đầu tiên, nhưng sau đó các loại ngày/thời gian .NET có phần rối tung trong quan điểm của tôi. Tôi khuyên bạn nên sử dụng Noda Time, nhưng tôi biased :)

0
TimeSpan tspan; 

tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay; 
+0

Câu trả lời chính xác đã được cung cấp http://stackoverflow.com/a/17553758/3893182 – danopz

2

Tác phẩm này dành cho tôi.

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
+0

Làm việc tốt cho tôi, cảm ơn. – amnippon

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