Página 1 de 2

converte campo numerico em horas

Enviado: 07 Jul 2011 13:23
por wandersonwfs
Boa Tarde,

estou precisando converter uma variavel numerico em um campo hora

a soma da minha variavel esta dando 5,73 e o correto calculando em horas serias 7:16:00,

como faço isso em clipper?

converte campo numerico em horas

Enviado: 07 Jul 2011 13:33
por alxsts
Olá!

Seja bem-vindo ao fórum Wanderson!
wandersonwfs escreveu:a soma da minha variavel esta dando 5,73 e o correto calculando em horas serias 7:16:00
O que foi somado para obter 5,73? Forneça mais detalhes. Não vejo como associar 5,73 com 7:16:00.

converte campo numerico em horas

Enviado: 07 Jul 2011 14:24
por wandersonwfs
Alessandre,

Meu relatorio esta tendo os seguintes valores:

0,16 minutos
0,16 minutos
0,20 minutos
0,17 minutos
0,17 minutos
0,14 minutos
0,14 minutos
0,10 minutos
0,07 minutos
0,06 minutos
0,12 minutos
0,11 minutos
0,14 minutos
0,08 minutos
0,07 minutos
0,24 minutos
1,13 1hora e 13 minutos
2,39 2 horas e 13 minutos
-----
5,56 errado correto seria 07:16:00

converte campo numerico em horas

Enviado: 07 Jul 2011 15:23
por sambomb
nSecs := Secs("00:00:16")
nSecs += Secs("00:00:16")
nSecs += Secs("00:00:20")
nSecs += Secs("00:00:17")
nSecs += Secs("00:00:17")
nSecs += Secs("00:00:14")
nSecs += Secs("00:00:14")
nSecs += Secs("00:00:10")
nSecs += Secs("00:00:07")
nSecs += Secs("00:00:06")
nSecs += Secs("00:00:12")
nSecs += Secs("00:00:11")
nSecs += Secs("00:00:14")
nSecs += Secs("00:00:08")
nSecs += Secs("00:00:07")
nSecs += Secs("00:00:24")
nSecs += Secs("01:13:00")
nSecs += Secs("02:39:00")

cTempo := TString(nSecs)

converte campo numerico em horas

Enviado: 07 Jul 2011 15:40
por anacatacombs
Opa opa, calma.
0,16 minutos equivale a 16 minutos ou a 9.6 segundos?

converte campo numerico em horas

Enviado: 07 Jul 2011 15:51
por alxsts
Olá!

Quando lemos uma string de horário no formato HH:MM:SS, como em 07:16:00, temos tres grandezas envolvidas, ou seja, horas, minutos e segundos onde uma é fração de outra. Assim, se você somar tudo como números, obterá um resultado incorreto.

A solução é reduzir tudo para a menor unidade (neste caso segundos) e acumular à medida em que vai imprimindo o relatório. Na hora de totalizar o campo, converter os segundos de volta para o formato HH:MM:SS.

Consulte os exemplos do Clipper: C:\CLIPPER5\SOURCE\SAMPLE\TIME.PRG

O Sambomb mostrou quase isso. Apenas formatou as strings de forma incorreta (os minutos passaram a ser segundos).

converte campo numerico em horas

Enviado: 07 Jul 2011 16:06
por anacatacombs
alxsts escreveu:A solução é reduzir tudo para a menor unidade (neste caso segundos) e acumular à medida em que vai imprimindo o relatório.
Era aí que eu ia chegar :) ...

converte campo numerico em horas

Enviado: 07 Jul 2011 17:30
por Jairo Maia
Olá Wanderson,

Sua soma está errada. O total de horas do seu exemplo soma 07:25:00 e não 07:16:00.

Se a variavel é numérica, não é virgula, e sim ponto. Assim, com base nas dicas dos colegas veja se o exemplo abaixo lhe ajuda:

Código: Selecionar todos

Cls
cTempo := SomaScs( 0.16 )
cTempo += SomaScs( 0.16 )
cTempo += SomaScs( 0.20 )
cTempo += SomaScs( 0.17 )
cTempo += SomaScs( 0.17 )
cTempo += SomaScs( 0.14 )
cTempo += SomaScs( 0.14 )
cTempo += SomaScs( 0.10 )
cTempo += SomaScs( 0.07 )
cTempo += SomaScs( 0.06 )
cTempo += SomaScs( 0.12 )
cTempo += SomaScs( 0.11 )
cTempo += SomaScs( 0.14 )
cTempo += SomaScs( 0.08 )
cTempo += SomaScs( 0.07 )
cTempo += SomaScs( 0.24 )
cTempo += SomaScs( 1.13 )
cTempo += SomaScs( 2.39 )

cTempo := TString( cTempo )

? cTempo

Func SomaScs( nTime )
Local cTime := "0" + StrTran( LTrim( Str( nTime ) ), ".", ":" ) + ":00"
Retu Secs( cTime )

converte campo numerico em horas

Enviado: 08 Jul 2011 11:03
por sambomb
No caso não seria apenas para multiplicar os valores por 3600 para obter a quantidade em segundos?


1.00 horas = 3600 segundos
0.16 horas = 3600 * 0.16 = 576 segundos

No meu exemplo bastaria somar os valores multiplicados por 3600 e depois usar a função TString()

converte campo numerico em horas

Enviado: 08 Jul 2011 11:49
por alxsts
Olá!

Não Sam.

Uma hora tem 60 minutos de 60 segundos portanto, 3600 segundos.

Assim, para converter uma string no formato HH:MM:SS em segundos, deve-se aplicar a fórmula:

Código: Selecionar todos

nSecs :=( Val(HH) * 3600 ) + ( Val(MM) * 60 ) + Val( SS )

converte campo numerico em horas

Enviado: 08 Jul 2011 12:01
por sambomb
Só que não está nesse formato...

Se estiver nesse formato basta usar o Secs("00:10:00")

converte campo numerico em horas

Enviado: 08 Jul 2011 13:23
por Jairo Maia
Olá Sambomb,

Em seu post das 11h03m vc diz:
1.00 horas = 3600 segundos <= Aqui Correto
0.16 horas = 3600 * 0.16 = 576 segundos <= Aqui Errado
Veja que no caso do autor do tópico, 0.16 refere-se a 16 minutos. Assim, 16 minutos x 60 segundos = 960 segundos, e não 576 segundos.

converte campo numerico em horas

Enviado: 08 Jul 2011 13:57
por sambomb
Wanderson, explica isso melhor!

converte campo numerico em horas

Enviado: 08 Jul 2011 20:17
por alxsts
Olá!
sambomb escreveu:Só que não está nesse formato... Se estiver nesse formato basta usar o Secs("00:10:00")
Realmente, não está no formato padrão para representar horários. Mas aí, seria muito melhor e mais fácil o Wanderson se adequar ao padrão... A fórmula que passei é a fórmula da função Secs()
sambomb escreveu:explica isso melhor!
O cálculo que você faz resulta em 16% de uma hora: (16/100) * 3600 = 576s. E o correto é, sabendo-se que são 16 minutos e que 1 minuto tem 60 segundos, 16 * 60 = 960s
anacatacombs escreveu:Era aí que eu ia chegar
Desculpe querida, valeu pela ajuda.

converte campo numerico em horas

Enviado: 11 Jul 2011 08:38
por sambomb
Alexandre, eu entendi o que vc quis dizer, não entendi o que Wanderson (autor do tópico) quer afinal...