2009-10-08 26 views
5

Tengo una cadena, "2009-10-08 08: 22: 02Z", que está en formato ISO 8601.Analizando cadena ISO 8601 a DateTime en .NET?

¿Cómo uso DateTime para analizar este formato?

+4

ISO 8601 también permite especificar un desplazamiento de zona horaria (por ejemplo, "2009-10-08T12: 52: 02 + 04: 30" sería el mismo tiempo que el anterior). Sin embargo, ninguna de las respuestas aborda esto ... –

Respuesta

4

No, no es ISO 8601. Valid ISO 8601 representación tendría T entre partes de fecha y hora.

DateTime pueden manejar nativamente formatos válidos ISO 8601. Sin embargo, si está atascado con esta representación particular, puede intentar DateTime.ParseExact y proporcionar una cadena de formato.

+3

Saludos, pero el wiki muestra ambos formatos – Kaya

+2

No he podido analizar mi cadena con "u" o "s", sin embargo, reemplazar la T con un espacio se hace fácilmente. Esto parece funcionar Estoy usando VB .NET con .NET 2.0. –

+0

@romkyns La respuesta parece correcta para mí. De su documento "estándar ISO-8601", leí en los capítulos 3.4.3 y 4.3.2 que la "T" es necesaria cuando se muestran la fecha y la hora. Ver también ejemplos B.1.3. Y las fechas en formato como se presentan en cuestión se manejan de forma nativa. – StefanG

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

La clase DateTime compatible con el standard format string de u para este formato

Creo que por el formato ISO (con el separador T), el uso "s" en lugar de "U". O utilice:

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

para admitir ambos formatos.

Cuestiones relacionadas