2012-10-24 12 views
15

Tôi đang cố truy xuất một khoảng thời gian từ một chuỗi, nhưng TryParseExact trả về false (không thành công).TimeSpan.TryParseExact không hoạt động

Tôi không thể thấy những gì tôi đang làm sai, bạn có thể trợ giúp không? Tôi đã thử 2 phiên bản của dòng của tôi trong mã, cả hai đều không hoạt động.

TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime) 

TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime) 

EDIT: cả phản ứng ở đây là chính xác, tôi có sai định dạng cho định dạng khoảng thời gian tùy chỉnh của tôi - những sai lầm tôi làm là giả định rằng các định dạng tùy chỉnh cho DateTime sẽ làm việc cho TimeSpans, nhưng họ thì không.

Trả lời

27

Vấn đề chỉ đơn giản là trong chuỗi định dạng cho TimeSpan, bạn đã xác định "HH:mm:ss". Số thông số HH (chữ hoa) không hợp lệ đối với thời gian. Bạn nên sử dụng hh. Chuỗi định dạng thực sự là trường hợp nhạy cảm.

Ký tự đại tràng (:) cũng cần phải được thoát, vì vậy hãy sử dụng "hh\\:mm\\:ss", @"hh\:mm\:ss" hoặc "hh':'mm':'ss". Tất cả ba hình thức sẽ có tác dụng tương tự.

Bạn có thể xem lại danh sách các chuỗi định dạng tùy chỉnh hợp lệ cho TimeSpan here. và các chuỗi định dạng chuẩn cho TimeSpan là here.

Trong khi HH hợp lệ đối với DateTime và DateTimeOffset trong đó nó đại diện cho đồng hồ 24 giờ và chữ thường hh đại diện cho đồng hồ 12 giờ, Đối với TimeSpan - thành phần giờ luôn dựa trên 24 giờ. Bạn sẽ nghĩ rằng định dạng HH sẽ là định dạng được chọn, cho tính đồng nhất nhưng không phải là hh.

+0

cảm ơn, tôi đã không nhận ra rằng các chuỗi tùy chỉnh cho DateTime và TimeSpan khác nhau. – mcmillab

+0

MS là STUPID có định dạng DateTime và Dấu thời gian khác nhau. Cám ơn phản hồi của bạn. – Mensur

+0

Có "HH: mm: ss" trả về false. Tôi cũng đã để scape ký tự đại tràng như Oğuz Yıldız nói. Sau đó, định dạng của tôi là "hh \\: mm \\: ss". Đó là sự kết hợp của hai câu trả lời. – user1011138

1

Định dạng chuỗi mà bạn đang truyền không đúng.

var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime); 

g- Định dạng ngắn chung và nhạy cảm về văn hóa.

Thông tin thêm về điều này ở đây Standard Timespan Format Strings

+0

ok, nhưng tôi đã cung cấp chuỗi định dạng tùy chỉnh, tại sao nó không hoạt động? – mcmillab

+0

tôi đã thử điều này và làm việc của nó.what chính xác là không làm việc cho bạn –

+0

Tôi đã thử đề nghị của bạn, và có nó không hoạt động, nhưng tôi vẫn muốn hiểu tại sao tôi không. – mcmillab

2

Có thể bạn sẽ được đề cập rằng bạn cần thoát khỏi ký tự đại tràng.

TryParseExact("04:00:01", "HH\\:mm\\:ss" ...