Qual é o formato correto a ser usado para data / hora em um arquivo XML

98

Qual formato devo usar para data / hora ao gravar em um arquivo XML usando .NET? Devo simplesmente usar DateTime.ToString()ou devo usar um formato específico?

Jon B
fonte

Respostas:

138

Sempre uso o formato ISO 8601 (por exemplo 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). É o formato de data XSD também. Esse é o formato preferido e uma string de formato padrão de data e hora , embora você possa usar uma string de formato manual, se necessário, se não quiser o 'T' entre a data e a hora:date.ToString("yyyy-MM-dd HH:mm:ss");

EDIT: Se você estiver usando uma classe gerada a partir de um XSD ou serviço da Web, você pode apenas atribuir a instância DateTime diretamente à propriedade da classe. Se você estiver escrevendo um texto XML, use o acima.

Ryan
fonte
44

EDIT: Este é um conselho ruim. Use "o", como acima. "s" faz a coisa errada .

Eu sempre uso isso:

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

Isso está correto se o seu esquema for assim:

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

O que resultaria em:

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

Você pode obter mais informações aqui: http://www.w3schools.com/xml/schema_dtypes_date.asp

Jonnii
fonte
10
Lembre-se de que isso converte a data em UTC. Ao processar a data, você deve convertê-la de volta para seu fuso horário atual com base no local (a menos que esteja processando tudo em UTC). Além disso, normalmente você colocaria um 'Z' no final para indicar que a data é UTC.
Ryan,
"s" funciona para mim ao chamar um serviço da web .net de soap ui.
Tristan Channing
4

Se você estiver montando manualmente a string XML, use var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); Isso gerará o formato XML oficial de data e hora. Mas você não precisa se preocupar com o formato se usar os métodos de serialização integrados.

chilltemp
fonte
jonnii retornará basicamente o mesmo resultado.
chilltemp
3
Neste caso, todas as datas DEVEM estar no fuso horário UTC, caso contrário, o uso do sufixo "Z" está errado.
Fr0sT
Vou repetir o comentário anterior - isso é realmente incorreto se o dt não for utc.
Brady Moritz
3

O que o DTD tem a dizer?

Se o arquivo XML for para comunicação com outro software existente (por exemplo, SOAP), verifique se esse software é esperado.

Se o arquivo XML for para serialização ou comunicação com software não existente (por exemplo, aquele que você está escrevendo), você pode defini-lo. Nesse caso, eu sugeriria algo que seja fácil de analisar no (s) idioma (s) de sua escolha e fácil de ler para humanos. por exemplo, se a sua linguagem (seja VB.NET ou C # .NET ou qualquer outra) permite que você analise datas ISO (AAAA-MM-DD) facilmente, esta é a que eu sugiro.

Tanktalus
fonte