Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Variable que suma mas de 24h (https://www.clubdelphi.com/foros/showthread.php?t=68483)

Delphitest 16-06-2010 11:37:25

Variable que suma mas de 24h
 
Buenos días,

necesito definir una variable que sume el total de las hora trabajadas de un trabajador.

Tengo todo bien excepto un detalle importante. Al sumar las horas las meto en una variable TTime y resulta que si por ejemplo son 25h, solo me dice 1

Llego a la conclusión que ese tipo de variable abarca desde 0 a 24 pero no pasa de ahí (es logico)

¿Que tipo de variable puedo usar para obtener un resultado ilimitado de horas?

Me interesa que si sumo 21h, 20h y 23h el resultado sea 64h, todo esto manteniendo un formato de hora.

Como referencia los campos que sumo son de tipo TTime.

Gracias de Nuevo por vuestra ayuda.

Neftali [Germán.Estévez] 16-06-2010 13:41:32

Debes tener claro que una cosa es el formato y otra los datos.

Si quieres sumar horas, puedes usar un Byte o un entero, otra cosa después es cómo muestres el resultado.

Delphitest 16-06-2010 13:51:28

A que te refieres?

Te importa ponerme un ejemplo para hacerme una idea, me pierdo con esto y le estoy dando vueltas sin obtener resultado.

Suponemos que tengo dos campos tipo Time, que llamo horas1 y horas2

Quiero que una variable sume los dos campos de tal manera que:

horas1 = 23:00
horas2 = 21:00

Necesito una variable que de por resultado 44:00

Si esa variable la defino tipo TTime el resultado es 20:00

mightydragonlor 16-06-2010 15:16:05

pues usas un Integer, que suma muchisimo, y luego pues divides entre 24 y ya

Caro 16-06-2010 16:04:33

Hola Delphitest, puedes utilizar el tipo Real, en el resultado de la suma, la parte entera te dara los días y la parte decimal las horas, a la cantidad de dias le multiplicas por 24 .....

Código Delphi [-]
var
 h1, h2 : TTime;
 dias, horas, suma : Real;
 Hour, Min, Sec, MSec: Word;
begin
 h1 := StrToTime('23:00');
 h2 := StrToTime('21:10');

 suma := h1 + h2;
 
 dias := Int(suma);//obtenemos la parte entera
 horas := Frac(suma); //la parte fraccionaria
 
 DecodeTime(suma, Hour, Min, Sec, MSec); //descomponemos
 
 dias := dias*24 + Hour;
 
 showmessage(FloatToStr(dias)+' : '+IntToStr(Min));

De esa forma tomamos en cuenta los minutos, segundos....

Saluditos

Delphitest 16-06-2010 18:24:52

Muchisimas gracias Caro

funciona con lo que me dices a la perfección.

Para rizar el rizo ¿es posible ver siempre la hora y minutos con dos digitos?

Veo que cuando aparece por ejemplo 3h pone 3:0

¿Es posible ver 03:00?

No tiene demasiada importancia pero quedaría mas presentable en el informe. Si no lo dejo como está porque el cálculo está correcto.


Un saludo

Caro 16-06-2010 18:54:33

Cita:

Empezado por Delphitest (Mensaje 367454)
Para rizar el rizo ¿es posible ver siempre la hora y minutos con dos digitos?

Si se puede, para ello puedes utilizar la función Format:

Código Delphi [-]
showmessage(FloatToStr(dias)+' : '+Format('%0.2d',[Min]));

Saluditos

Caro 16-06-2010 19:02:42

Otra cosita que se me olvidaba, para la parte de las horas debes aplicar la función Trunc para que te devuelva como entero.

Código Delphi [-]
  showmessage(Format('%0.2d',[Trunc(dias)])+' : '+Format('%0.2d',[Min]));

Saluditos

Delphitest 16-06-2010 19:43:10

Solución rápida y eficaz :)

Muchas Gracias, ya lo he implantado y funciona a la perfección.


La franja horaria es GMT +2. Ahora son las 17:36:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi