2011-01-21 22 views
6

Necesito saber la manera óptima de escribir/leer DateTime en/desde xml. ¿Debo escribir directamente DateTime en XML o DateTime.ToString() en XML?C#: Leer/Escribir Fecha y hora desde/en XML

La segunda pregunta es cómo leer el elemento de fecha de xml. Se puede usar la fundición para esto; (DateTime) rec.Element ("fecha"). o valor que necesito para analizar la cadena como esta DateTime.Parse (rec.Element ("fecha"). Value)

Respuesta

17

Puede utilizar la fundición de un XElement o XAttribute con LINQ a XML, sí ... pero no de la cadena en sí. LINQ to XML usa el formato XML estándar, independientemente de su configuración cultural.

muestra:

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); 
    } 
} 

salida para mí:

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

¿Casting de XElement es mejor o está analizando el XElement.value ?? –

+0

@Pankaj: Definitivamente * usaría * las conversiones de LINQ a XML. De esta forma, utilizará el formato estándar para almacenar fechas/horas en XML, para que pueda interoperar limpiamente con otro código (posiblemente escrito en otros idiomas). –

+0

¿Qué quiere decir con la conversión de Linq a XML? lo siento si estoy siendo estúpido ...: P ... Quiere decir que debería escribir la fecha directamente en XML y luego lanzar el XElement ... ¿es eso lo que quiere decir? –

5

Una alternativa a la respuesta de @ Jon Skeet es convertir el DateTime en una cadena mediante la "round trip" format. Esto lo convierte a un formato que guardará y cargará sin perder ninguna información.

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

Y vuelve a convertir usando DateTime.Parse(). La página a la que me he vinculado tiene ejemplos que le muestran cómo convertir a/desde el formato de cadena. Todo lo que necesita hacer es almacenar esta cadena en su XML. Esto te da más control sobre cómo se almacenan los datos (si quieres más control, eso es).

+0

Más control, pero menos portabilidad. XML tiene formas estandarizadas de almacenar fechas y horas, lo pensaría cuidadosamente antes de desviarme deliberadamente de ellas. –

+0

@Jon: Sí, estaba tratando de señalar una forma más generalizada de serializar hacia/desde el texto sin pérdida de tiempo, pero en realidad no lo expresé muy bien, como dices, me he desviado un poco del punto:) –

5

Puede usar la clase XmlConvert para convertir ay de cadenas.