Question

Mon but est d'utiliser l'objet DateTime .NET (en C #) et ont qui être sérialisé à et parsé d'une chaîne (pour une utilisation en XML) d'une manière qui est conforme aux normes. La norme spécifique que j'ai à l'esprit est la norme ISO 8601 pour représenter les dates et heures.

Je veux une solution facile à utiliser (de préférence, un appel de méthode dans chaque sens)  qui va convertir et de la version concaténée du format. Je voudrais également conserver les informations de fuseau horaire local.

Voici un exemple du genre de ficelle que je voudrais obtenir:

2009-04-15T10: 55: 03,0174 à 05: 00

Ma version cible .NET est de 3,5.

J'ai trouvé une solution à ce problème il y a plusieurs années qui implique un format personnalisé et la méthode DateTime.ToString (chaîne). J'ai été surpris qu'une solution conforme aux normes plus simples n'existait pas. En utilisant une chaîne de format personnalisé pour sérialiser et analyser d'une manière conforme aux normes sent un peu à moi.

Était-ce utile?

La solution

Heureusement, il y a XmlConvert.ToString() et XmlConvert.ToDateTime() qui gère ce format:

string s = XmlConvert.ToString(DateTime.Now,
     XmlDateTimeSerializationMode.Local);
DateTime dt = XmlConvert.ToDateTime(s,
     XmlDateTimeSerializationMode.Local);

(choisissez votre sérialisation-mode approprié)

Autres conseils

dateobj.ToString ( "s") vous obtiendrez une représentation de chaîne ISO 8601 conforme, qui peut ensuite être désérialisée avec DateTime.Parse ()

Il ressemble à .NET a un peu amélioré à cet égard au cours des dernières années. System.Xml.XmlConvert objet semble être conçu pour répondre à toute une catégorie de besoins qui apparaissent dans ce contexte. Les fonctions suivantes semblent être conçu spécifiquement pour traiter conversion d'objets DateTime d'une manière souple et conforme aux normes.

XmlConvert.ToDateTime(string, System.Xml.XmlDateTimeSerializationMode)


XmlConvert.ToString(DateTime, System.Xml.XmlDateTimeSerializationMode)

Le membre de l'énumération suivante semble particulièrement utile dans le cas où vous souhaitez conserver les informations de fuseau horaire d'origine:

System.Xml.XmlDateTimeSerializationMode.RoundtripKind

Voici les liens vers la documentation pour les fonctions sur MSDN:

XmlConvert.ToDateTime (string, System.Xml.XmlDateTimeSerializationMode)

XmlConvert.ToString (DateTime, System.Xml.XmlDateTimeSerializationMode)

Essayez ceci:

System.Xml.XmlConvert.ToString(TimeStamp, System.Xml.XmlDateTimeSerializationMode.Utc))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top