¿Cuál es el formato correcto para usar para la fecha / hora en un archivo XML?

98

¿Qué formato utilizo para la fecha / hora al escribir en un archivo XML usando .NET? ¿Utilizo simplemente DateTime.ToString()o tengo que utilizar un formato específico?

Jon B
fuente

Respuestas:

138

Yo siempre uso el formato ISO 8601 (p . Ej. 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). También es el formato de fecha XSD . Ese es el formato preferido y una cadena de formato de fecha y hora estándar , aunque puede usar una cadena de formato manual si es necesario si no desea la 'T' entre la fecha y la hora:date.ToString("yyyy-MM-dd HH:mm:ss");

EDITAR: Si está utilizando una clase generada desde un XSD o un servicio web, puede simplemente asignar la instancia de DateTime directamente a la propiedad de la clase. Si está escribiendo texto XML, utilice lo anterior.

Ryan
fuente
44

EDITAR: Este es un mal consejo. Utilice "o", como se indicó anteriormente. "s" hace lo incorrecto .

Yo siempre uso esto:

dateTime.ToUniversalTime().ToString("s");

Esto es correcto si su esquema se ve así:

<xs:element name="startdate" type="xs:dateTime"/>

Lo que resultaría en:

<startdate>2002-05-30T09:00:00</startdate>

Puede obtener más información aquí: http://www.w3schools.com/xml/schema_dtypes_date.asp

Jonnii
fuente
10
Tenga en cuenta que esto convierte la fecha a UTC. Cuando procesa la fecha, debe volver a convertirla a su zona horaria actual según la configuración regional (a menos que esté procesando todo en UTC). Además, por lo general, colocaría una 'Z' al final para indicar que la fecha es UTC.
Ryan
"s" me funciona cuando llamo a un servicio web .net desde soap ui.
Tristan Channing
4

Si está ensamblando manualmente la cadena XML, use var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); Eso generará el formato oficial de fecha y hora XML. Pero no tiene que preocuparse por el formato si utiliza los métodos de serialización integrados.

chilltemp
fuente
jonnii devolverá básicamente el mismo resultado.
chilltemp
3
En este caso, todas las fechas DEBEN estar en la zona horaria UTC; de lo contrario, el uso del sufijo "Z" es incorrecto.
Viernes
Repetiré el comentario anterior: esto es realmente incorrecto si el dt no es utc.
Brady Moritz
3

¿Qué tiene que decir la DTD?

Si el archivo XML es para comunicarse con otro software existente (por ejemplo, SOAP), verifique que el software sea lo que espera.

Si el archivo XML es para serialización o comunicación con software no existente (por ejemplo, el que está escribiendo), puede definirlo. En cuyo caso, sugeriría algo que sea fácil de analizar en el idioma que elijas y fácil de leer para los humanos. por ejemplo, si su idioma (ya sea VB.NET o C # .NET o lo que sea) le permite analizar las fechas ISO (YYYY-MM-DD) fácilmente, ese es el que sugiero.

Tanktalus
fuente