2013-06-25 35 views
5

Tôi đang cố gắng để sử dụng:Deserialize ISO 8601 ngày thời gian chuỗi C# DateTime

JsonConvert.DeserializeObject<DateTime>("2009-02-15T00:00:00Z", new IsoDateTimeConverter()) 

Nhưng nó mang lại cho tôi một sai FormatException: Input string was not in a correct format.

Tôi đang làm gì?

+0

cần thiết để nhúng nó với dấu ngoặc kép. "\" 2009-02-15T00: 00: 00Z \ "". Cảm ơn, vịt cao su! –

+0

Dirk, bạn đã cứu mạng tôi! – Raymond

+0

lol. nghi ngờ nó, nhưng vui mừng rằng tôi có thể có được một trợ giúp anyway :) –

Trả lời

4

Nếu bạn đang phân tích một giá trị duy nhất, cách tiếp cận đơn giản nhất có lẽ là để chỉ cần sử dụng DateTime.ParseExact:

DateTime value = DateTime.ParseExact(text, "o", null); 

Các "o" mô hình là round-trip pattern, mà được thiết kế để tiêu chuẩn ISO-8601:

Trình định dạng định dạng chuẩn "O" hoặc "o" tương ứng với "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' FffffffK" chuỗi định dạng tùy chỉnh cho DateTime các giá trị và cho "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss'. 'fffffffzzz "chuỗi định dạng tùy chỉnh cho các giá trị DateTimeOffset.

tôi đã không chỉ định một nhà cung cấp định dạng, vì nó không quan trọng:

Các mô hình cho specifier điều này phản ánh một tiêu chuẩn định nghĩa (ISO 8601). Vì vậy, nó luôn luôn giống nhau bất kể văn hóa được sử dụng hoặc nhà cung cấp định dạng được cung cấp.

Nếu bạn cần Json.NET xử lý minh bạch trong khi deserializing các giá trị khác, nó có thể là một đề xuất phức tạp hơn - những người khác có thể biết nhiều hơn.

Ngoài ra, cũng giống như một plug, bạn có thể xem xét sử dụng dự án Noda Time của mình, hỗ trợ ISO-8601 và tích hợp với JSON.NET - mặc dù chưa được đóng gói sẵn.

+0

Làm thế nào tôi sẽ sử dụng Noda Thời gian để làm chuyển đổi ISO-8601? –

+0

@DavidPfeffer: Trong Noda Time 1.2, bạn muốn sử dụng 'OffsetDateTimePattern.GeneralIsoPattern' để phân tích một 'OffsetDateTime'. Hoặc nếu nó là * luôn luôn * có một 'Z' hơn là một offset khác nhau, bạn có thể sử dụng' InstantPattern.GeneralPattern'. –

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