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?

Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top