Respostas:
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.
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
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.
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.
A XmlConvert
classe oferece esses tipos de instalações. Sobre DateTimes, em particular, tome cuidado com métodos obsoletos. Veja também: https://stackoverflow.com/a/7457718/1288109