Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jaqueline Rodrigues

Subtrair e Somar Horas

Recommended Posts

Olá pessoal,

Alguém pode me ajudar, não sei como resolver o seguinte problema, preciso de uma função que subtraia e some algumas horas que tenho como string, estou utilizando a seguinte função:

 

Essas horas são váriaveis, é o usuário quem infoma, como posso resolver isso ?

 

Resultado = SubtrairHoras ("77:20:00", "137:10:00", "00:00:00");

 

private string SubtrairHoras(string HD1, string HD2, string HD3)
{
DateTime xHD1 = Convert.ToDateTime(HD1);
DateTime xHD2 = Convert.ToDateTime(HD2);
DateTime xHD3 = Convert.ToDateTime(HD3);

var HoraInicial = new TimeSpan(xHD1.Hour, xHD1.Minute, xHD1.Second);
var HoraIntermediaria = new TimeSpan(xHD2.Hour, xHD2.Minute, xHD2.Second);
var HoraFinal = new TimeSpan(xHD3.Hour, xHD3.Minute, xHD3.Second);

var resultado = HoraInicial - (HoraIntermediaria - HoraFinal);

//Para que o calculo pega somente o inteiro dos valores
var resultadofinal = string.Format("{0}:{1}:{2}", ((int)resultado.TotalHours).ToString().PadLeft(2, '0'), ((int)resultado.Minutes).ToString().PadLeft(2, '0'), ((int)resultado.Seconds).ToString().PadLeft(2, '0'));

return resultadofinal;
}

 

Porém aparece o seguinte erro: Não há suporte para DATETIME representado pela sequencia de caracteres no calendário System.Globalization.GregorianCalendar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrado a solução...

 

private string SubtrairHoras(string HD1, string HD2, string HD3)
{
var HoraInicial = new TimeSpan(int.Parse(Mid(HD1, 1, HD1.IndexOf(':'))), int.Parse(Mid(HD1, HD1.IndexOf(':') + 2, 2)), int.Parse(Mid(HD1, HD1.IndexOf(':') + 5, 2)));
var HoraIntermediaria = new TimeSpan(int.Parse(Mid(HD2, 1, HD2.IndexOf(':'))), int.Parse(Mid(HD2, HD2.IndexOf(':') + 2, 2)), int.Parse(Mid(HD2, HD2.IndexOf(':') + 5, 2)));
var HoraFinal = new TimeSpan(int.Parse(Mid(HD3, 1, HD3.IndexOf(':'))), int.Parse(Mid(HD3, HD3.IndexOf(':') + 2, 2)), int.Parse(Mid(HD3, HD3.IndexOf(':') + 5, 2)));
var resultado = HoraIntermediaria - (HoraInicial - HoraFinal);
//Para que o calculo pega somente o inteiro dos valores
var resultadofinal = string.Format("{0}:{1}:{2}", ((int)resultado.TotalHours).ToString().PadLeft(2, '0'), ((int)resultado.Minutes).ToString().PadLeft(2, '0'), ((int)resultado.Seconds).ToString().PadLeft(2, '0'));
return resultadofinal;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.