Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No me gusta este Codigo, Me ayudan?! (https://www.clubdelphi.com/foros/showthread.php?t=26588)

marceloalegre 27-10-2005 16:55:41

No me gusta este Codigo, Me ayudan?!
 
Buen dia:
Estoy haciendo un programita en el que cuento tiempo en un cliente, el tema es que estoy contando el tiempo convirtiendo segundos con un formatdatetime pero eso me di cuenta que al llegar a las 24hs se vuelve a cero, logico porque sumaria 1 dia, pero tengo que mostrar solo horas, o sea si esta logueado 25 hs me muestre 25:00:00... por lo tanto genere el siguiente algoritmo:
Código Delphi [-]
  
 function formateartiempo(tpo : integer): string;
 var aux : string;
 begin
    aux := IntToStr(tpo);
    if length(aux) = 1 then
      aux := '0' + aux;
    result := aux;
 end;
 function ConvertirTiempo(totalSeg : integer): string;
 var
    horas, minutos, segundos : word;
 begin
    horas :=totalseg div (3600);
    totalseg := totalseg mod (3600);
    minutos := totalseg div (60);
    segundos := totalseg mod (60);
    result := formateartiempo(horas) + TimeSeparator +
  formateartiempo(minutos) + TimeSeparator + formateartiempo(segundos);
 end;
(el timeseparator es un char que tiene : :))

Bueno, esto anda perfercto, pero me gusta ser prolijo y aprender mas,, alguien me puede decir como mejorar esto.. me parece muy fea la funcion formateartiempo para empezar... me pueden dar una mano? gracias.!

luisgutierrezb 27-10-2005 18:47:38

mmm podrias utilizar la funcion de la api de windows GetTickCount, te dice el numero de milisegundos o segundos (no recuerdo) que el windows lleva activo, podrias hacer algo asi:
Inicio := GetTickCount;
y al final lo vuelves a obtener para sacar la diferencia y conviertes el resultado a minutos, horas o lo que desees.

la otra es que al restar 2 variables FechaHora, te regresa la diferencia
la parte entera te dice cuantos dias fueron, y la parte decimal la conviertes normal a hora, minutos y demas, y transformas a lo que tu quieres...

maeyanes 27-10-2005 18:53:13

Una variación a tu función formateartiempo:

Código Delphi [-]
function formateartiempo(tpo : integer): string;
begin
  result := Format('%.2d', [tpo])
end;


Saludos...

Lepe 28-10-2005 00:23:52

Directamente trabaja con las rutinas que tienes en la unidad DateUtils de Delphi.

Al menos en delphi 6 tienes:
Código Delphi [-]
HoursBetween(AThen, ANow:TdateTime);
SecondsBetween(AThen, ANow:TdateTime);
MinutesBetween(AThen, ANow:TdateTime);
MillisecondsBetween(AThen, ANow:TdateTime);
DaysBetween(AThen, ANow:TdateTime);
y un largo etc.

Básicamente lo pasas todo a segundos o milisegundos, algo así:
Código Delphi [-]
function HorasEntre(Antes, Ahora:TdateTime):string;
var totalSeg:Dword;
begin
  totalSeg := secondsBetween(antes,ahora);
  result := format ('%d : %d :%d', 
                [totalseg div (3600),
                totalseg div (60),
                totalseg mod (60)]);
end;
He separado el carácter 2 puntos, porque creo recordar que interfiere con la función format, ya sería cosa de mirarlo con más detalle.

Consejo: Nunca trabajes con Times, siempre con TdateTime, (por lo que comentas del cambio de fecha).

saludos

Julià T. 28-10-2005 01:03:54

sólo una pequeña corrección al código para tiempos mayores de 3600 segundos
Código Delphi [-]
function HorasEntre(Antes, Ahora:TdateTime):string;
var totalSeg:Dword;
begin
  totalSeg := secondsBetween(antes,ahora);
  result := format ('%d : %d :%d', 
                [totalseg div (3600),
                (totalseg div (60)) mod 60,  //no lo he probado
                totalseg mod (60)]);
end;

marceloalegre 28-10-2005 01:27:27

;)
 
Bueno, podemos decir que ha quedado todo correcto con la ayuda de ustedes. Gracias a todos!!!!


La franja horaria es GMT +2. Ahora son las 04:46:21.

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