PDA

Ver la Versión Completa : TDateTime para +de 24hrs.


mez
30-11-2006, 18:54:38
eso.

Quiero ir acumulando una cantidad de horas y que al final me salga, por ejemplo 27:19:00 (27 horas, 19 minutos, 00 segundos)

Estoy usando TDateTime para sumar y al parecer esto va bien, pero cuando le doy DecodeTime, me sale 3:19:00 osea, pasó los 24hrs y empieza de cero?

gracias.

luisgutierrezb
30-11-2006, 19:51:43
el TDateTime te maneja maximo las 24 horas, sin embargo cuando sumas mas de 24 horas, te aumenta el dia, asi que multiplica los dias x 24 mas las horas, esto inicializando un TDateTime a cero

mez
30-11-2006, 20:00:37
como asi? ejemplo, please...

mez
01-12-2006, 20:01:56
lo solucioné asi:

aux:=floor(HoraAcumulada)*24;
DecodeTime(HoraAcumulada,hora,minuto,segundo,msegundo);
hora:=hora+aux;

fedelphi
02-12-2006, 00:55:49
hola mez, una vez tenia que acumular horas y empece a realizarlo con decodetime y demas yerbas, pero me lleve cada dolor de cabeza!!! para modificarlo, tratar y controlar esos datos era realmente terrible por lo que opte por hacerlo distinto, si solo quieres acumular las horas pon este procedimiento
procedure TFPlanillaGral.devuelve_hora_integer(hora: TTime; var hora_int, minutos_int: integer);
var
string_aux,hora_aux,minutos_aux:string;
begin
string_aux:=timetostr(hora);
hora_aux:=copy(string_aux,1,pos(':',string_aux)-1);
delete(string_aux,1,3);
minutos_aux:=copy(string_aux,1,pos(':',string_aux)-1);
hora_int:=strtoint(hora_aux);
minutos_int:=strtoint(minutos_aux);
end;


y lo llamas asi
devuelve_hora_integer(HORASEMPLEADAS,horas_entero,minutos_entero);
Horas_acumuladas:=HorasxRubro+horas_entero;
Minuto_acumulados:=Minutos_acumulados+minutos_entero;
if Minutos_acumulados>=60 then
begin
Minutos_acumulados:=Minutos_acumulados-60;
Horas_acumuladas:=Horas_acumuladas+1;
end;
Espero te sirva y te ahorre muchos dolores de cabeza. Suerte
Fede
PD:Te queda tener en cuenta los segundos, que en mi caso no eran necesarios.