2009-03-19 30 views

Trả lời

44

đọc Xml thường mong đợi ngày/lần trong một định dạng rất cụ thể; bạn có thể sử dụng tự thực hiện bằng XmlConvert:

string s = XmlConvert.ToString(DateTime.Now); 
DateTime when = XmlConvert.ToDateTime(s); 

Nếu bạn đang sử dụng cái gì khác, bạn sẽ phải đọc nó như là một chuỗi và sử dụng DateTime.TryParseExact (hoặc tương tự) để xác định chuỗi định dạng thực tế:

string s = reader.ReadContentAsString(); 
DateTime when = DateTime.ParseExact(s, "M/d/yy hh:mm tt", 
    CultureInfo.InvariantCulture); 

Nếu bạn đang sử dụng XmlSerializer, bạn có thể sử dụng một tài sản shim để làm việc chuyển đổi - cho tôi biết nếu điều này là những gì bạn đang làm ...

+0

Dữ liệu tôi cho ăn xảy ra là 29/10/2012 15:25 và dữ liệu tôi đã không thành công. Khi tôi đổi nó thành 10/11/2012 15:25, nó đã hoạt động. –

+0

@MarcGravell, khi tôi cố gắng deserialize một số nguồn cấp dữ liệu rss bằng cách sử dụng 'XmlSerializer',' PubDate' yếu tố gây ra lỗi. Làm thế nào tôi có thể sửa chữa nó? – burhan

+2

@burhan bằng cách xem xét giá trị sẽ đến như thế nào và xử lý nó một cách thích hợp? Ngoài ra, khung cốt lõi bao gồm các lớp nhắm mục tiêu RSS có thể làm một công việc tốt hơn. –

82

Theo XML schema spec, giá trị thời gian ngày phải theo ISO860 1 định dạng, ví dụ: một cái gì đó như

2009-03-13T22:16:00 
+2

Sử dụng phương pháp 'iso8601' của ruby, ví dụ 'Time.now.iso8601'. – Zubin

+2

Ngoài sự tò mò, định dạng ISO8601 sẽ trông giống như '2009-03-18T22: 16: 00-05: 00', nhưng câu trả lời của David (bỏ qua múi giờ) cũng hoạt động đối với tôi (trong khi định dạng ISO8601 thì không). Đây có phải là do sự tuần tự hóa cục bộ trong XmlConverter (do đó không cần múi giờ)? – djiango

+1

Trong ISO8601, múi giờ là tùy chọn, vì vậy cả chuỗi gốc và chuỗi của bạn là ngày giờ ISO8601 hợp lệ. Theo http://www.w3.org/TR/xmlschema-2/#deviantformats, múi giờ cũng là tùy chọn trong lược đồ XML. Tôi không chắc tại sao phiên bản múi giờ không hoạt động cho bạn. –

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