2010-11-16 23 views
6

Tôi đang cố gắng để phân tích String sau vào một đối tượng DateTime trong C#:DateTime.ParseExact không hoạt động chút nào, tại sao?

DateTime.ParseExact("20101108 230125", "yyyyMMdd hhmmss", null) 

mặc dù giá trị có vẻ đúng phương pháp ParseExact chỉ tiếp tục đem lại cho tôi những điều sau đây:

Chuỗi không được công nhận là một DateTime hợp lệ.

Ai có thể cho tôi biết lý do và cách tôi có thể phân tích cú pháp chuỗi ở trên mà không phải thực hiện theo cách thủ công? Không phải là ParseExact được cho là dành cho loại dịp này?

Trả lời

21

Bạn có định dạng trong nhiều giờ sai, nên được viết hoa:

DateTime.ParseExact("20101108 230125","yyyyMMdd HHmmss", null) 

Chữ thường hh quy định rằng thời gian sử dụng một đồng hồ 12 giờ (với AM/PM). Chữ hoa HH là giờ đồng hồ 24 giờ.

Để biết thông tin chi tiết, hãy kiểm tra documentation of custom DateTime format strings.

+0

Tại sao điều này gây ra ngoại lệ? Cá nhân tôi mong đợi hh để chuyển đổi 23 thành 11 thay vì ném một ngoại lệ. ParseExact có gây ra nó không? –

+1

@Marcus: 'ParseExact' sẽ làm những gì nó nói; phân tích cú pháp chuỗi bằng cách sử dụng định dạng * chính xác * được chỉ định. Vì 'hh' yêu cầu nó mong đợi một giá trị thời gian đồng hồ 12 giờ ở vị trí đó,' 23' rõ ràng nằm ngoài phạm vi giá trị chấp nhận được. Nó phân tích chuỗi chính xác, không có chuyển đổi nào được thực hiện. Vì vậy, có, ngoại lệ được ném bởi phương thức 'ParseExact'. –

+0

Chúc mừng cho lời giải thích mở rộng. :) –

2

Hãy thử sử dụng:

var dt = DateTime.ParseExact("20101108 230125", "yyyyMMdd HHmmss", null) 

Các "hh" là cho thời gian 12 giờ và "HH" trong 24 giờ.

+0

Rất tiếc, chỉ cần nhìn thấy câu trả lời của Fredrik ... –

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