Pregunta
Tengo algunas cadenas en formato xxh:yym donde xx son horas e yy son minutos como "05h:30m".¿Cuál es una forma elegante de convertir una cadena de este tipo a TimeSpan?
Solución
Esto parece funcionar, aunque es un poco complicado:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
Otros consejos
DateTime.ParseExact
o DateTime.TryParseExact
le permite especificar el formato exacto de la entrada.Después de obtener el DateTime
, puedes agarrar el DateTime.TimeOfDay
el cual es un TimeSpan
.
En ausencia de TimeSpan.TryParseExact
, Creo que una solución "elegante" está descartada.
@buyutec Como sospechaba, este método no funcionaría si los períodos de tiempo son más de 24 horas.
Aquí hay una posibilidad:
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
Y si quieres hacerlo más elegante en tu código, usa 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;
}
Entonces puedes hacer
"05h:30m".ToTimeSpan();
De otro hilo:
Son TimeSpan.Analizar y TimeSpan.TryParse no hay opciones?Si no está utilizando un formato "aprobado", deberá realizar el análisis manualmente.Probablemente capturaría sus dos valores enteros en una expresión regular y luego intentaría analizarlos en números enteros, desde allí puede crear un nuevo TimeSpan con su constructor.