Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Exclamation 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.!

Última edición por Neftali [Germán.Estévez] fecha: 27-10-2005 a las 17:30:03. Razón: Cortar texto y cambiar etiquetas
Responder Con Cita
  #2  
Antiguo 27-10-2005
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
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...
Responder Con Cita
  #3  
Antiguo 27-10-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Una variación a tu función formateartiempo:

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


Saludos...
Responder Con Cita
  #4  
Antiguo 28-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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 totalSegword;
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 28-10-2005
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 21
Julià T. Va por buen camino
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 totalSegword;
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;
Responder Con Cita
  #6  
Antiguo 28-10-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Lightbulb ;)

Bueno, podemos decir que ha quedado todo correcto con la ayuda de ustedes. Gracias a todos!!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:43:15.


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
Copyright 1996-2007 Club Delphi