2009-10-08 7 views
5

Mam ciąg znaków "2009-10-08 08: 22: 02Z", który jest w formacie ISO 8601.Parsowanie ciągu znaków ISO 8601 do DateTime w .NET?

Jak używać DateTime do analizowania tego formatu?

+4

ISO 8601 umożliwia również określenie przesunięcia strefy czasowej (np. "2009-10-08T12: 52: 02 + 04: 30" byłby taki sam jak powyżej). Jednak żadna z odpowiedzi nie dotyczy tego ... –

Odpowiedz

4

Nie, to nie jest ISO 8601. Valid ISO 8601 reprezentacja miałaby T między częściami czasu i daty.

DateTime może natywnie obsługiwać prawidłowe formaty ISO 8601. Jeśli jednak utkniesz w tym konkretnym przedstawieniu, możesz spróbować wpisać DateTime.ParseExact i podać ciąg formatu.

+3

Pozdrawiam, ale na wiki widać oba formaty. – Kaya

+2

Nie udało mi się sparsować ciągu znaków za pomocą "u" lub "s", ale zastąpienie T spacja jest łatwe. To wydaje się działać. Używam VB .NET z .NET 2.0. –

+0

@romkyns Odpowiedź wydaje się być dla mnie poprawna. Ze swojego "standardu ISO-8601" przeczytałem w rozdziałach 3.4.3 i 4.3.2, że "T" jest potrzebny, gdy wyświetlana jest data i godzina. Zobacz także przykłady B.1.3. Daty w formacie przedstawionym w pytaniu są obsługiwane natywnie. – StefanG

19
string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, "u", System.Globalization.CultureInfo.InvariantCulture); 

Klasa DateTime wspiera standard format string U dla tego formatu

myślę o formacie ISO (z separatorem T), użyj "s" zamiast "u". Lub użyj:

string txt= "2009-10-08 08:22:02Z"; 
DateTime output = DateTime.ParseExact(txt, new string[] {"s", "u"}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

wspierać oba formaty.