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?

¿Fue útil?

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top