Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

EdiSimoes

[Resolvido] Calcular média de tempo.

Mensagens Recomendadas

EdiSimoes

Alguem poderia me ajudar a calcular a média de 3 valores de tempo, tenho um BD SqlServer2008, que guarda 2 campos DateTime e um Campo Varchar com o cálculo dos dois DateTime, o cálculo da diferença está sendo gravado assim: 20:00:00, 32:00:00, 26:10:00,

como eu calcularia a média desses resultados???

Desde já obrigado.

Edi


Edi Carlos Simões

Estudante de Análise e Desenvolvimento de Sistemas

edisimoes@bol.com.br

http://www.desenvolvenetma.com.br

http://analisedesistemas.bl.ee

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Podes substituir os dois pontos por apenas ponto, efetuar a soma. De seguida calcular a média.

Creio que resolverá o problema..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NunoDinis

Média = (valor 1 + valor 2 + ... + Valor n) / n

Isso é a formula para o calculo da média.

O problema está em como somar as datas... vamos esperar pelo feedback.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
EdiSimoes

Fiz assim, mais não fucionou:

lblValor1.Text = "20.00.00"
lblValor2.Text = "25.10.00"
lblValor3.Text = "35.36.00"
lblTotal.Text = Val(lblValor1.Text + lblValor2.Text + lblValor3.Text) / 3

retornou assim: 6,66666666

Editado por Caça
GeSHi

Edi Carlos Simões

Estudante de Análise e Desenvolvimento de Sistemas

edisimoes@bol.com.br

http://www.desenvolvenetma.com.br

http://analisedesistemas.bl.ee

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
veaoum

falando apenas de cor sem ver nada isto não funcionara?

dim primeiro () as integer = split(lblvalor1.text,":")
dim segundo () as integer = split(lblvalor2.text,":")
dim terceiro () as integer = split(lblvalor3.text,":")
dim media as new datetime
media.addmillesecunds((primeiro(2)+segundo(2)+terceiro(2))\3)
media.addminute((primeiro(1)+segundo(1)+terceiro(1))\3)
media.addhours((primeiro(0)+segundo(0)+terceiro(0))\3)

depois retornas a media em formato hora.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

Se não te ajeitares com o TimeSpans experimenta uma forma rudimentar:

1. Descobre qual a data mais pequena;

2. Soma a todas as diferenças de cada data relativamente à mais pequena. Algo do género:

total_dif := 0;
....
{Para cada data}
total_dif := total_dif + (data - data_pequena);
....

3. Divide esse total pela quantidade de datas (incluindo a mais pequena)

4. Adiciona em dias, o número que te deu anteriormente, à data mais pequena.

E voilá, tens a média das datas!

Editado por passarito

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Um teste simples em VB.NET com TimeSpan. Confio em como haja talvez um método mais simples, mas este foi o primeiro que me veio à ideia:

Dim media As New TimeSpan(0, 0, 0)
Dim contador As Integer = 0
Dim horas()() As String = {"20:00:00".Split(":"), "32:00:00".Split(":"), "26:10:00".Split(":")}

For Each h In horas
   media = media.Add(New TimeSpan(h(0), h(1), h(2)))
   contador += 1
Next

media = New TimeSpan(media.Ticks / contador)

MsgBox(media.Days & "d " & media.Hours & ":" & media.Minutes & ":" & media.Seconds & _
      vbNewLine & media.Ticks)

Espero que te possa dar ideias.

Cumprimentos.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
EdiSimoes

Bom dia.

Fiz assim deu certo:

lblValor1.Text = "20:10:00"
 lblValor2.Text = "10:10:00"
 lblValor3.Text = "30:10:00"

 Dim media As New TimeSpan(0, 0, 0)
 Dim contador As Integer = 0
 Dim horas()() As String = {lblValor1.Text.Split(":"), lblValor2.Text.Split(":"), lblValor3.Text.Split(":")}
 For Each h In horas
	 media = media.Add(New TimeSpan(h(0), h(1), h(2)))
	 contador += 1
 Next
 media = New TimeSpan(media.Ticks / contador)
 lblTotal.Text = media.Hours & ":" & media.Minutes

Agradecido pela ajuda de vcs do forum.

Edi

Editado por Caça
GeSHi

Edi Carlos Simões

Estudante de Análise e Desenvolvimento de Sistemas

edisimoes@bol.com.br

http://www.desenvolvenetma.com.br

http://analisedesistemas.bl.ee

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.