2009-10-08 45 views
5

Tôi có một chuỗi, "2009-10-08 08: 22: 02Z", có định dạng ISO 8601.Phân tích chuỗi ISO 8601 thành DateTime trong .NET?

Làm cách nào để sử dụng DateTime để phân tích cú pháp định dạng này?

+4

ISO 8601 cũng cho phép xác định múi giờ (ví dụ: "2009-10-08T12: 52: 02 + 04: 30" sẽ giống như trên). Tuy nhiên không ai trong số các câu trả lời địa chỉ này ... –

Trả lời

4

Không, nó không phải là tiêu chuẩn ISO 8601. Valid ISO 8601 đại diện sẽ có T giữa các phần thời gian và ngày tháng.

DateTime có thể xử lý nguyên gốc các định dạng ISO 8601 hợp lệ. Tuy nhiên, nếu bạn bị mắc kẹt với biểu diễn cụ thể này, bạn có thể thử DateTime.ParseExact và cung cấp chuỗi định dạng.

+3

Chúc mừng nhưng wiki hiển thị cả hai định dạng – Kaya

+2

Tôi không thể phân tích cú pháp chuỗi bằng cách sử dụng "u" hoặc "s". Điều này dường như hoạt động. Tôi đang sử dụng VB .NET với .NET 2.0. –

+0

@romkyns Trả lời có vẻ đúng cho tôi. Từ tài liệu "chuẩn ISO-8601" của bạn, tôi đã đọc trong chương 3.4.3 và 4.3.2 rằng "T" là cần thiết khi ngày và giờ được hiển thị. Xem thêm ví dụ B.1.3. Và ngày ở định dạng như được trình bày trong câu hỏi được xử lý nguyên bản. – StefanG

19
string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, "u", System.Globalization.CultureInfo.InvariantCulture); 

Lớp DateTime hỗ trợ standard format string của u cho định dạng này

Tôi nghĩ rằng đối với định dạng ISO (với tách T), sử dụng "s" thay vì "u". Hoặc sử dụng:

string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, new string[] {"s", "u"}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

để hỗ trợ cả hai định dạng.

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