2011-04-06 15 views
8

estoy recibiendo una excepción formatError de esta llamada a TimeSpan.ParseExact, pero el MSDN documentation que estoy leyendo dice que este formato debe ser correcta:¿Qué pasa con esta línea TimeSpan.ParseExact?

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture); 

Puede alguien decirme por qué esto no está funcionando? Estoy haciendo casi exactamente lo mismo que con una llamada a DateTime.ParseExact y esto funciona bien:

DateTime datetTime = DateTime.ParseExact("090820", "yyMMdd", CultureInfo.InvariantCulture); 

Respuesta

15

TimeSpan no utiliza las mismas reglas de formato como DateTime.

Quiere hhmmss, no HHmmss.

Se encuentra en la página equivocada en MSDN - ¿Quieres algo como:

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

+0

Gracias por su ayuda, ahora funciona perfectamente. –

2

Estás intenta utilizar DateTime cadenas de formato para analizar una TimeSpan. TimeSpan tiene sus propias cadenas de formato (ligeramente diferentes). Consulte MSDN para obtener una lista completa: Custom TimeSpan Format Strings

En particular, cambie HH por hh. Esto le dará:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", 
             "hhmmss", // Note this parameter 
             CultureInfo.InvariantCulture); 
3

Según Custom TimeSpan Format Strings, horas están representadas por "h" en lugar de "H".

Así que esto funciona bien:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "hhmmss", 
             CultureInfo.InvariantCulture); 

La documentación se ha vinculado a la costumbre es para fecha y hora cadenas de formato, que no son lo mismo. Son para DateTime.ParseExact, etc. la documentación que vincula a es para TimeSpan.ParseExact etc.

2

analizar la cadena en un valor DateTime, luego restar su valor Date para obtener el tiempo como un intervalo de tiempo:

DateTime t = DateTime.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture); 
TimeSpan time = t - t.Date; 
+0

No hay ninguna razón para involucrar a DateTime. – Greg

+0

¿No he visto tu trabajo antes ...? –

+0

Esta es una solución razonable para el código que debe ejecutarse en versiones anteriores de .NET. TimeSpan.ParseExact() requiere .NET 4. –