TimeSpan.Parse ("23:00:00") devuelve 23 horas.C# TimeSpan.El formato no válido devuelve un valor incorrecto en lugar de la excepción
TimeSpan.Parse ("24:00:00") devuelve 24 días.
Me doy cuenta de que cometí un error porque el rango de horas permitido es 0-23. Pero durante minutos y segundos si intenta analizar un valor fuera de rango, obtiene una excepción. En el caso de las horas con un valor fuera de rango, el analizador asume incorrectamente que significa días en lugar de horas.
¿Alguien puede explicar esto?
Este ejemplo aquí cubre este mismo tema e indica que http://msdn.microsoft.com/en-us/magazine/ee309881.aspx
El mismo parece ser cierto lo TryParse. Tengo 24 días a pesar de que los documentos indican que el análisis debe fallar.
http://msdn.microsoft.com/en-us/library/3z48198e
// String to Parse TimeSpan
// --------------- ---------------------
// 0 00:00:00
// 14 14.00:00:00
// 1:2:3 01:02:03
// 0:0:0.250 00:00:00.2500000
// 10.20:30:40.50 10.20:30:40.5000000
// 99.23:59:59.9999999 99.23:59:59.9999999
// 0023:0059:0059.0099 23:59:59.0099000
// 23:0:0 23:00:00
// 24:0:0 Parse operation failed.
// 0:59:0 00:59:00
// 0:60:0 Parse operation failed.
// 0:0:59 00:00:59
// 0:0:60 Parse operation failed.
// 10: Parse operation failed.
// 10:0 10:00:00
// :10 Parse operation failed.
// 0:10 00:10:00
// 10:20: Parse operation failed.
// 10:20:0 10:20:00
// .123 Parse operation failed.
// 0.12:00 12:00:00
// 10. Parse operation failed.
// 10.12 Parse operation failed.
// 10.12:00 10.12:00:00
qué encontré un fallo, o estoy haciendo algo mal?
EDIT: He probado esto en LinqPad y usando una aplicación de consola en .NET4 en Windows 7 64bit.
var result = TimeSpan.Parse("24:00:00");
Console.WriteLine(result);
result = TimeSpan.Parse("24:00:00", CultureInfo.InvariantCulture);
Console.WriteLine(result);
Esto se traduce en:
24.00:00:00
24.00:00:00
Usted está comparando resultado de TryParse y analizar. El método TimeSpan.Parse (String) intenta analizar cadena (parámetro) utilizando cada uno de los formatos específicos de cultura para la cultura actual. Entonces estás recibiendo días. –
Me arroja una excepción. Tal vez es una cuestión de cultura? @Romil: 'Parse' llama a' TryParse' detrás de escena, por lo que debería tener el mismo resultado. – Rawling
Esto genera de manera confiable una OverflowException cuando lo intento. Mejore su pregunta documentando la versión de .NET, su cultura y las anulaciones que haya aplicado en la configuración regional de Windows. –