2009-04-15 5 views
7

Mon objectif est d'utiliser l'objet .NET DateTime (en C#) et de le sérialiser et de l'analyser à partir d'une chaîne (pour une utilisation en XML) C'est conforme aux normes. La norme spécifique que j'ai à l'esprit est la norme ISO 8601 pour la représentation des dates et des heures.Comment sérialiser des objets DateTime dans .NET d'une manière conforme aux normes

Je veux une solution facile à utiliser (de préférence, un appel de méthode dans chaque sens) qui convertira vers et depuis la version concaténée du format. Je voudrais également préserver les informations sur le 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 3.5.

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

Répondre

15

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é)

+0

vous anciens sont Assurez-vous rapidement sur le tirage au sort. :-) –

+1

Vieux-temps !! ?? ;-p Indigné snort .... Dans ma journée ... –

3

Il ressemble .NET a un peu amélioré à cet égard sur le passé quelques années. L'objet System.Xml.XmlConvert semble être conçu pour répondre à toute une catégorie de besoins qui apparaissent dans ce contexte. Les fonctions suivantes semblent être conçues spécifiquement pour traiter la conversion des objets DateTime d'une manière flexible 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)

1

Essayez ceci:

System.Xml.XmlConvert.ToString(TimeStamp, System.Xml.XmlDateTimeSerializationMode.Utc)) 
4

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()

Questions connexes