convert - c# timespan format am pm
Parse string to TimeSpan (5)
Tengo algunas cadenas de formato xxh: yym donde xx es horas y aa son minutos como "05h: 30m". ¿Cuál es una forma elegante de convertir una cadena de este tipo a TimeSpan?
¿ TimeSpan.Parse y TimeSpan.TryParse no son 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.
Aquí hay una posibilidad:
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
Y si desea que sea más elegante en su código, use 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();
Esto parece funcionar, aunque es un poco hackish:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
DateTime.ParseExact
o DateTime.TryParseExact
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 sospechabas, este método no funcionaría si el tiempo dura más de 24 horas.
De otro hilo: