2008-08-25 14 views

Respuesta

26

Esto parece funcionar, aunque es un poco hacker:

TimeSpan span; 


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span)) 
      MessageBox.Show(span.ToString()); 
+15

se recomienda usar quizá 'TimeSpan.TryParse ("hh'h: 'mm'm'", fuera lapso)' para una solución más limpia y más robusto – mike

+2

Excepto cuando la cadena es 25h: 30m –

+1

nota: esta solución está limitada a 23h: 59m – fubo

1

son TimeSpan.Parse y TimeSpan.TryParse no opciones? Si no está utilizando un formato "aprobado", deberá realizar el análisis sintáctico manualmente. Probablemente capturaría tus dos valores enteros en una expresión regular, y luego trataré de analizarlos en enteros, a partir de ahí puedes crear un nuevo TimeSpan con su constructor.

6

DateTime.ParseExact o DateTime.TryParseExact le permite especificar el formato exacto de la entrada. Después de obtener el DateTime, puede tomar el DateTime.TimeOfDay que es un TimeSpan.

En ausencia de TimeSpan.TryParseExact, creo que una solución 'elegante' está fuera de la mezcla.

@buyutec Como se sospechaba, este método no funcionaría si los intervalos de tiempo tienen más de 24 horas.

+0

[TimeSpan.TryParseExact] (http://msdn.microsoft.com/ . en-us/library/system.timespan.tryparseexact% 28v% = VS.100 29.aspx) se añadió en .NET 4.0 –

2

Here'e una posibilidad:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 

Y si quieres que sea más elegante en su código, utilice un método de extensión:

public static TimeSpan ToTimeSpan(this string s) 
{ 
    TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 
    return t; 
} 

A continuación, puede hacer

"05h:30m".ToTimeSpan(); 
+0

Lo que es sobre 'TimeSpan.TryParse ("hh'h: 'mm'm'", fuera span) '? https://stackoverflow.com/a/26769/206730 – Kiquenet