Quel est le format correct à utiliser pour la date / heure dans un fichier XML

98

Quel format dois-je utiliser pour la date / heure lors de l'écriture dans un fichier XML à l'aide de .NET? Dois-je simplement utiliser DateTime.ToString()ou dois-je utiliser un format spécifique?

Jon B
la source

Réponses:

138

J'utilise toujours le format ISO 8601 (par exemple 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). C'est aussi le format de date XSD . Il s'agit du format préféré et d'une chaîne de format de date et d'heure standard , bien que vous puissiez utiliser une chaîne de formatage manuelle si nécessaire si vous ne voulez pas que le «T» entre la date et l'heure:date.ToString("yyyy-MM-dd HH:mm:ss");

EDIT: Si vous utilisez une classe générée à partir d'un XSD ou d'un service Web, vous pouvez simplement affecter l'instance DateTime directement à la propriété de classe. Si vous écrivez du texte XML, utilisez ce qui précède.

Ryan
la source
44

EDIT: C'est un mauvais conseil. Utilisez "o", comme ci-dessus. "s" fait la mauvaise chose .

J'utilise toujours ceci:

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

Ceci est correct si votre schéma ressemble à ceci:

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

Ce qui entraînerait:

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

Vous pouvez obtenir plus d'informations ici: http://www.w3schools.com/xml/schema_dtypes_date.asp

jonnii
la source
10
Gardez à l'esprit que cela convertit la date en UTC. Lorsque vous traitez la date, vous devez la reconvertir dans votre fuseau horaire actuel en fonction des paramètres régionaux (sauf si vous traitez tout en UTC). De plus, vous mettriez généralement un «Z» à la fin pour indiquer que la date est UTC.
Ryan
"s" fonctionne pour moi lorsque j'appelle un service Web .net depuis soap ui.
Tristan Channing
4

Si vous assemblez manuellement la chaîne XML, utilisez var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); Cela produira le format officiel XML Date Time. Mais vous n'avez pas à vous soucier du format si vous utilisez les méthodes de sérialisation intégrées.

chilltemp
la source
jonnii retournera fondamentalement le même résultat.
chilltemp
3
Dans ce cas, toutes les dates DOIVENT être dans le fuseau horaire UTC, sinon l'utilisation du suffixe "Z" est incorrecte.
Ven
Je vais répéter le commentaire précédent - c'est en fait incorrect si le dt n'est pas utc.
Brady Moritz
3

Que dit la DTD?

Si le fichier XML est destiné à communiquer avec d'autres logiciels existants (par exemple, SOAP), vérifiez ce logiciel pour ce qu'il attend.

Si le fichier XML est destiné à la sérialisation ou à la communication avec un logiciel non existant (par exemple, celui que vous écrivez), vous pouvez le définir. Dans ce cas, je suggérerais quelque chose qui soit à la fois facile à analyser dans la ou les langues de votre choix et facile à lire pour les humains. par exemple, si votre langage (que ce soit VB.NET ou C # .NET ou autre) vous permet d'analyser facilement les dates ISO (AAAA-MM-JJ), c'est celui que je suggérerais.

Tanktalus
la source