PDA

Ver la Versión Completa : Suma de Horas


Patho
16-10-2007, 16:26:30
Hola muchachos, tengo el siguiente problema, tengo un programa donde hago la suma de horas (hh:mm:ss) y el problema es que cuando supero las 24 horas en la suma el contador vuelve a 0 por ejemplo si la suma es 26:34:10 la hora suma que muestra es 2:34:10 y no las 26 horas, hay alguna forma de que las pueda transformar a 26 horas y seguir aumentando la suma cuando corresponda??

las horas las rescato de archivos de texto plano .txt ya que asi es como me las entregan, rescado los datos en variables string y hago las sumas con strtotime(variable) para obtener el total de las suma de las horas

ojalá me puedan ayudar


saludos

Patho

jhonny
16-10-2007, 16:30:15
Apuesto que la función HoursBetween te ayudara con lo que necesitas, pero recuerda que debes pasarle el valor de la fecha y la hora, no solo la hora porque el algoritmo "creeria" que estas hablando de un solo dia ;).

Lepe
16-10-2007, 17:04:40
Otra opción sería no usar fechas y horas.

Al leer del archivo lo pasas todo a segundos y lo guardas en tipo Integer o Int64. Cuando necesites mostrar el texto, con una rutina haces las divisiones oportunas.

Saludos

Patho
16-10-2007, 17:38:48
muchas gracias por los comentarios, lo solucione un poco antes que me despondieras Lepe pero justamente eso fue lo que hice pase todo a segundops y despues realice el paso inverso, aca les pondoi las funciones que use por si a alguien mas le sirva

//** para separar el string de la hora (hh:mm:ss) cada una por separado
procedure Split
(const Delimiter: Char;
Input: string;
const Strings: TStrings) ;
begin
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
end;


// Transformacion de Hora a segundos donde Hora es un String (hh,mm,ss)

function cantsegundos(horas:string):integer;
var
segundos : TStringList;
hora,min,seg : longint;
begin
segundos := TStringList.Create;
Split(':',horas, segundos);
hora := strtoint(segundos[0]) * 3600;
min := strtoint(segundos[1]) * 60;
seg := strtoint(segundos[2]);

cantsegundos := hora + min + seg;

end;



//Transformar de Segundos a Hora (hh:mm:ss)

function SegToHour(segundos:longint):String;
var
hora,min,seg : longint;
begin
hora := segundos div 3600;
min := (segundos mod 3600) div 60;
seg := (segundos mod 3600) mod 60;

SegToHour := inttostr(hora) + ':' + inttostr(min) + ':' + inttostr(seg);

end;



estas son las funciones que utilice gracias a todos por sus comentarios y sugerencias



hasta la proxima



Saludos

Patho