Pergunta
Eu tenho algumas strings no formato xxh:yym, onde xx são horas e yy são minutos, como "05h:30m".Qual é uma maneira elegante de converter uma string desse tipo em TimeSpan?
Solução
Isso parece funcionar, embora seja um pouco hackeado:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
Outras dicas
DateTime.ParseExact
ou DateTime.TryParseExact
permite especificar o formato exato da entrada.Depois de obter o DateTime
, você pode pegar o DateTime.TimeOfDay
que é um TimeSpan
.
Na ausência de TimeSpan.TryParseExact
, acho que uma solução 'elegante' está fora de questão.
@buyutec Como você suspeitava, este método não funcionaria se os intervalos de tempo fossem superiores a 24 horas.
Aqui está uma possibilidade:
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
E se você quiser deixar seu código mais elegante, use um método de extensão:
public static TimeSpan ToTimeSpan(this string s)
{
TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
return t;
}
Então você pode fazer
"05h:30m".ToTimeSpan();
De outro tópico:
São TimeSpan.Parse e TimeSpan.TryParse não opções?Se não estiver usando um formato "aprovado", você precisará fazer a análise manualmente.Eu provavelmente capturaria seus dois valores inteiros em uma expressão regular e tentaria analisá-los em números inteiros. A partir daí você pode criar um novo TimeSpan com seu construtor.