2009-04-15 5 views
7

Mein Ziel ist die Verwendung des .NET DateTime-Objekts (in C#), das in einer Zeichenfolge für die Verwendung in XML serialisiert und analysiert wird das ist normkonform. Der spezifische Standard, an den ich denke, ist der ISO 8601-Standard für die Darstellung von Daten und Zeiten.Wie ich DateTime-Objekte in .NET in einer standardkonformen Weise serialisieren kann

Ich möchte eine einfach zu bedienende Lösung (vorzugsweise einen Methodenaufruf pro Richtung) , die zu und von der verketteten Version des Formats konvertieren wird. Ich möchte auch lokale Zeitzoneninformationen beibehalten.

Hier ist ein Beispiel für die Art von String Ich mag würde bekommen:

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

Mein Ziel .NET-Version ist 3.5.

Ich habe vor einigen Jahren tatsächlich eine Lösung für dieses Problem gefunden, die ein benutzerdefiniertes Format und die DateTime.ToString (string) -Methode beinhaltet. Ich war überrascht, dass eine einfachere standardkonforme Lösung nicht existierte. Die Verwendung einer benutzerdefinierten Formatzeichenfolge zum Serialisieren und Parsen in einer standardkonformen Weise riecht ein wenig nach mir.

Antwort

15

Glücklicherweise gibt es XmlConvert.ToString() und XmlConvert.ToDateTime(), die dieses Format Griffe:

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

(wählen Sie Ihre entsprechende Serialisierung-Modus)

+0

Sie Oldtimern sind Sicher schnell bei der Auslosung. :-) –

+1

Oldtimer !! ?? ;-p Empörtes Schnauben .... Zu meiner Zeit ... –

3

Es ist wie .NET aussieht hat sich ein wenig in dieser Hinsicht in den letzten verbessert ein paar Jahre. Das System.Xml.XmlConvert-Objekt scheint so zu sein, dass es eine ganze Klasse von Bedürfnissen adressiert, die in diesem Kontext erscheinen. Die folgenden Funktionen scheinen speziell für die flexible und standardkonforme Konvertierung von DateTime-Objekten entwickelt worden zu sein.

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


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

Die folgenden Enumerationsmember scheinen besonders nützlich in dem Fall, dass Sie die ursprünglichen Zeitzoneninformationen erhalten wollen:

System.Xml.XmlDateTimeSerializationMode.RoundtripKind 

Hier sind Links zur Dokumentation für die Funktionen auf MSDN:

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

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

1

Versuchen Sie folgendes:

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

dateobj.ToString ("s") erhalten Sie eine ISO 8601-konformen String-Darstellung erhalten, die mit DateTime.Parse werden kann dann deserialisiert()