CALCULO COM HORAS

MAXCIM 28/01/2013 15:42:44
#418216
olá amigos.

estou com um problema hoje que me surpreendeu e não sei como resolver..

faço uma soma de alguns horários e esse resultada eu comparo com um tempo padrão.

Citação:

Dim HRATSO As TimeSpan
Dim HoraLimite As TimeSpan
If TimeSpan.TryParse(strSomaAtraso, HRATSO) Then [ô] aqui eu passo uma string para Timespan

End If
If TimeSpan.TryParse([Ô]0:15:00[Ô], HoraLimite) Then

End If
Dim resul As Integer = TimeSpan.Compare(HRATSO, HoraLimite) [ô] aqui comparo as horas



tudo funcionou bem, até uma hora acumular mas de 23:59... tenho um resultado que dá 25:44:00 que não consigo passar para Timespan, nem date, nem datetime..

qual variável devo utilizar? ou como converter 25:44:00 em valor valido para cálculos com horas?

desde ja agradeço
ALTAIR148 28/01/2013 15:45:28
#418217
Boa tarde,

Veja se esse TÓPICO lhe ajuda.

MAXCIM 28/01/2013 16:47:20
#418228
Pior que não, Altair, de todas as maneiras que fiz parra passar uma data acumulada ( Maior que 23:59:59) para as variaveis da erro!
KERPLUNK 28/01/2013 16:55:48
#418232
Resposta escolhida
Essa é a maior dificuldade de iniciantes: Dados compostos.
O que você provavelmente está fazendo é cálculo de períodos, a maioria das vezes, o período é menor de 24 horas então trabalhar com timespan funciona. Mas no seu caso, a soma é de períodos e para isso, você deve usar DateTime. é a melhor saída.
MAXCIM 28/01/2013 17:19:08
#418241
Klerplunk, eu devo estar fazendo algo muito.. mas muito idiota.. mas não consegui passar 25:44:00 para Datetime.

ALTAIR148 28/01/2013 17:52:16
#418250
Eu tinha muitos problemas com o cálculo de horas, apartir do momento que passei a fazer eles direto no banco atraves de Procedures, ficou mil vezes mais prático, e sem falar que na velocidade aumentou bastante.
KERPLUNK 28/01/2013 17:59:15
#418252
Citação:

:
Klerplunk, eu devo estar fazendo algo muito.. mas muito idiota.. mas não consegui passar 25:44:00 para Datetime.


E nem vai conseguir. Cada vez que você adicionar horas na variável de tipo DateTime, use o método AddHours, assim, quando passar de 24 horas, ele vira um dia e x horas...
MAXCIM 29/01/2013 14:39:25
#418313
Pois é gente!

ta complicado, a RH me pediu a pouco para fazer um modulozinho de cálculos de horas.

do tipo 35:45:00 + 8:48:00 ou 220:00:00 - 16:30:00

era pra ser algo muito simples.. 3 caixinha de texto, e 2 botoes.. 1 para adicionar outro para subtrair.

mas esta parecendo algo impossível! não vejo maneiras de manipular datas cheias, não ha nenhuma variável que aceite a data com mais de 23:59:59 ...

se alguem tiver alguma ideia de como manipular esses valores, desde ja agradeço.

KERPLUNK 29/01/2013 15:19:24
#418314
1 - Desenhe o formulário com as caixas de texto, se quiser, podem ser com máscara mesmo
2 - Os cáculos com hora são bem simples:

[ô]aqui busque a data inicial do cálculo, (ano, mês, dia)
[ô]lembre que estamos passando apenas a data, portanto vai iniciar à partir de 00:00:00 a hora
[ô]se quiser, pode também especificar a hora (ano, mês, dia, hora, minuto, segundo)
Dim hora As New DateTime(2013, 1, 29)


Dim horario As String = [Ô]35:49:55[Ô]
[ô]aqui busque da textbox de horas
Dim horarioSplit As String() = horario.Split([Ô]:[Ô]C).ToArray()
[ô]dividindo a hh:mm:ss
hora = hora.Add(New TimeSpan(Convert.ToInt32(horarioSplit(0)), Convert.ToInt32(horarioSplit(1)), Convert.ToInt32(horarioSplit(2))))
[ô]35 horas, 49 minutos e 55 segundos
[ô]ou

hora = hora.AddHours(Convert.ToDouble(horarioSplit(0)))
[ô]35
hora = hora.AddMinutes(Convert.ToDouble(horarioSplit(1)))
[ô]49
hora = hora.AddSeconds(Convert.ToDouble(horarioSplit(2)))
[ô]55
[ô]usando um dos dois métodos acima, você vai ter na variável [Ô]hora[Ô], a data de início acrescida de 35 horas, 49 minutos e 55 segundos
MAXCIM 29/01/2013 16:24:00
#418328
Valeu kerPlunk. é isso ai mesmo!
Tópico encerrado , respostas não são mais permitidas