2009-04-15 10 views
7

Il mio obiettivo è utilizzare l'oggetto .NET DateTime (in C#) e farlo serializzare e analizzare da una stringa (per l'uso in XML) in un modo questo è conforme agli standard. Lo standard specifico che ho in mente è lo standard ISO 8601 per rappresentare date e orari.Come serializzare gli oggetti DateTime in .NET in modo conforme agli standard

Desidero una soluzione facile da utilizzare (preferibilmente, una chiamata di metodo in entrambe le direzioni) che convertirà in e dalla versione concatenata del formato. Vorrei anche conservare le informazioni sul fuso orario locale.

Ecco un esempio del tipo di corda Mi piacerebbe ottenere:

2009-04-15T10: 55: 03.0174-05: 00

La mia versione di destinazione NET è 3.5.

Ho effettivamente trovato una soluzione a questo problema diversi anni fa che comporta un formato personalizzato e il metodo DateTime.ToString (stringa). Sono rimasto sorpreso dal fatto che non esisteva una soluzione più semplice e conforme agli standard. Usando una stringa di formato personalizzata per serializzare e analizzare in un modo conforme agli standard, sento un po 'di odore per me.

risposta

15

Fortunatamente, c'è XmlConvert.ToString() e XmlConvert.ToDateTime() che gestisce questo formato:

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

(scegli il tuo serializzazione-modalità appropriata)

+0

voi siete veterani certo veloce sul sorteggio. :-) –

+1

I vecchi temporizzatori !! ?? ;-p Sbuffo indignato .... Ai miei tempi ... –

3

Sembra che .NET è migliorata un po 'in questo senso nel corso degli ultimi pochi anni. L'oggetto System.Xml.XmlConvert sembra essere progettato per rispondere a un'intera classe di esigenze che appaiono in questo contesto. Le seguenti funzioni sembrano essere progettate specificamente per indirizzare la conversione di oggetti DateTime in un modo flessibile e conforme agli standard.

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


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

Il seguente membro di enumerazione sembra particolarmente utile nel caso in cui si desidera conservare le informazioni fuso orario originale:

System.Xml.XmlDateTimeSerializationMode.RoundtripKind 

Ecco i link alla documentazione per le funzioni su MSDN:

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

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

1

Prova questo:

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

dateobj.ToString ("s") otterrà una rappresentazione di stringa ISO 8601-compliant, che possono poi essere deserializzato con DateTime.Parse()