2009-04-15 7 views
7

Moim celem jest użycie obiektu .NET DateTime (w języku C#) i umożliwienie jego serializowania i analizowania z ciągu znaków (do wykorzystania w języku XML) w pewien sposób to jest zgodne ze standardami. Specyficzną normą, którą mam na myśli, jest norma ISO 8601 do reprezentowania dat i czasów.Jak szeregować obiekty DateTime w .NET w sposób zgodny ze standardami

Chcę, aby proste w użyciu rozwiązanie (najlepiej w jedną metodę wywołania w każdym kierunku) , które będzie konwertować do i od połączonej wersji formatu. Chciałbym również zachować lokalną informację o strefie czasowej.

Oto przykład tego rodzaju sznurka chciałbym dostać:

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

Moja wersja docelowa .NET 3.5.

Rzeczywiście znalazłem rozwiązanie tego problemu kilka lat temu, który dotyczy niestandardowego formatu i metody DateTime.ToString (string). Byłem zaskoczony, że prostsze, zgodne z normami, rozwiązanie nie istniało. Używanie niestandardowego łańcucha formatowania do serializowania i analizowania w sposób zgodny z normami trochę mnie pachnie.

Odpowiedz

15

szczęście jest XmlConvert.ToString() i XmlConvert.ToDateTime() który obsługuje ten format:

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

(wybierz swój odpowiedni serializacji-mode)

+0

wy starzy są pewnie szybko w losowaniu. :-) –

+1

Stare zegary !!? ;- Oburzenie prycha .... Za moich czasów ... –

3

Wygląda .NET poprawiła się trochę w tym zakresie w ciągu ostatnich Kilka lat. Obiekt System.Xml.XmlConvert wydaje się być zaprojektowany w celu zaspokojenia całej klasy potrzeb pojawiających się w tym kontekście. Wydaje się, że następujące funkcje zostały zaprojektowane specjalnie pod kątem konwersji obiektów DateTime w elastyczny i zgodny ze standardami sposób.

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


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

następujących państw wyliczenie wydaje się szczególnie przydatna w przypadku, gdy chcesz zachować oryginalne informacje strefa czasu:

System.Xml.XmlDateTimeSerializationMode.RoundtripKind 

Oto linki do dokumentacji dla funkcji na MSDN:

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

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

1

Spróbuj tego:

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

dateobj.ToString ("s") dostanie ci ISO 8601 zgodnego reprezentację ciąg, który można następnie rozszeregować z DateTime.Parse()

Powiązane problemy