2011-01-21 25 views
6

Tôi cần biết cách viết/đọc ngày giờ tối ưu vào/từ xml. Tôi có nên trực tiếp viết DateTime vào XML hoặc DateTime.ToString() vào XML không.C#: Đọc/Ghi Ngày giờ từ/vào XML

Câu hỏi thứ hai là cách đọc yếu tố ngày từ xml. Có thể đúc được sử dụng cho việc này; (DateTime) rec.Element ("Ngày"). Giá trị hoặc i cần phải phân tích các chuỗi như DateTime.Parse (rec.Element ("Ngày") giá trị.) Này

Trả lời

17

Bạn có thể sử dụng đúc của an XElement hoặc XAttribute với LINQ to XML, vâng ... nhưng không phải của chính chuỗi đó. LINQ to XML sử dụng định dạng XML chuẩn, độc lập với các cài đặt văn hóa của bạn.

mẫu:

using System; 
using System.Xml.Linq; 

class Test 
{  
    static void Main() 
    { 
     DateTime now = DateTime.Now; 
     XElement element = new XElement("Now", now); 

     Console.WriteLine(element); 
     DateTime parsed = (DateTime) element; 
     Console.WriteLine(parsed); 
    } 
} 

Output cho tôi:

<Now>2011-01-21T06:24:12.7032222+00:00</Now> 
21/01/2011 06:24:12 
+0

Đúc XElement là tốt hơn hoặc phân tích cú pháp XElement.value ?? –

+0

@Pankaj: Tôi sẽ * chắc chắn * sử dụng chuyển đổi LINQ thành XML. Bằng cách đó, nó sẽ sử dụng định dạng chuẩn để lưu trữ ngày/giờ trong XML, vì vậy bạn có thể tương thích một cách rõ ràng với mã khác (có thể được viết bằng các ngôn ngữ khác). –

+0

Bạn có ý nghĩa gì bởi LINQ to XML conversion? xin lỗi nếu tôi đang ngu ngốc ..: P ... Bạn có nghĩa là để nói tôi nên viết ngày trực tiếp vào XML và sau đó Cast XElement .... là những gì bạn có nghĩa là ?? –

5

Một thay thế cho câu trả lời @ Jon Skeet là để chuyển đổi DateTime cho một chuỗi bằng cách sử dụng "round trip" format. Điều này chuyển đổi nó thành một định dạng sẽ lưu và tải mà không mất bất kỳ thông tin nào.

string dataToSave = myDateTime.ToString("o"); 

Và chuyển đổi lại bằng DateTime.Parse(). Trang tôi đã liên kết có các ví dụ cho bạn thấy cách chuyển đổi sang/từ định dạng chuỗi. Tất cả những gì bạn cần làm là lưu trữ chuỗi này vào XML của bạn. Điều này cho phép bạn kiểm soát nhiều hơn cách dữ liệu được lưu trữ (nếu bạn muốn kiểm soát nhiều hơn, đó là).

+0

Kiểm soát nhiều hơn, nhưng ít tính di động hơn. XML đã tiêu chuẩn hóa cách lưu trữ ngày tháng và thời gian - tôi sẽ suy nghĩ rất cẩn thận trước khi cố ý đi lạc khỏi chúng. –

+0

@Jon: Vâng, tôi đã cố gắng chỉ ra một cách tổng quát hơn để serialize đến/từ văn bản losslessly, nhưng tôi đã không thực sự đặt nó rất tốt - như bạn nói, tôi đã đi lạc một chút từ điểm:) –

5

Bạn có thể sử dụng lớp XmlConvert để chuyển đổi thành và từ chuỗi.

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