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 09-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Ayuda: función HH:MM:SS

Hola, necesito hacer una función que partiendo de una varieble float que contiene el tiempo total en segundos, me devuelva un string formateado en HH:MM:SS;

Código Delphi [-]
function ConvertTime(tiempo:float):string; //devuelve hh:mm:ss como string
 
....
var tiempototal:float;
begin
   tiempototal:=125487770; 
   Label1.Caption:=ConvertTime(tiempototal);
end;

Alguna sugerencia o idea??

Saludos y gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 09-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé si esto podría servirte:

Código Delphi [-]
function SecondsToTime(seconds: Integer) : TTime;
begin
  result := (seconds / (24 * 60 * 60));
end;

(* *)

begin
  ShowMessage( TimeToStr( SecondsToTime(60) ) );
end;

Lo encontré en este hilo de Delphi-PRAXiS y me pareció estupendo. Pero no sé si es lo que necesitas o qué...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 09-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, así de primeras pienso que si el tiempo lo guardas en segundos, pues en vez de un float podrías utilizar un integer, o Int64. Sería algo así:

Código Delphi [-]
function ConverTime(Seconds: Integer): string;
begin
  Result:=IntToStr(Seconds div 3600)+':'+IntToStr(Seconds div 60)+':'+IntToStr(Seconds mod 60);
end;


Sencillo, ¿no? Con divisiones y un resto.

Salu2.

Edito: vaya, dec se me adelantó... bueno mejor utiliza ese método, porque este me acabo de fijar que, por ejemplo, si tiene una hora y cinco minutos aparecería "1:5:0". En vez de IntToStr tendría que utilizar Format.

Última edición por ixMike fecha: 09-04-2008 a las 23:29:26.
Responder Con Cita
  #4  
Antiguo 09-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por mamu Ver Mensaje
Hola, necesito hacer una función que partiendo de una varieble float que contiene el tiempo total en segundos, me devuelva un string formateado en HH:MM:SS;...
Bueno, tomando la función de ixMike y sin dejar de usar un float;

Código Delphi [-]
function ConvertTime(Seconds: Extended): string;
var Value: int64;
begin
 Value := Trunc(Seconds);
 Result := IntToStr(Value div 3600) + ':' + IntToStr(Value div 60) + ':' + IntToStr(Value mod 60);
end;

Valga la redundancia
Saludos
Responder Con Cita
  #5  
Antiguo 09-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Pienso que seria mejor hacer esto,

Código Delphi [-]
function ConverTime(Seconds: Integer): string;
begin
  Horas   := Seconds div 3600;
  Minutos := (Seconds - (Horas*3600)) div 60;
  Segundos := (Seconds - (Horas*3600)) mod 60;
  Result:= IntToStr(Horas)+':'+Format('%.*d',[2,Minutos])+':'+Format('%.*d',[2,Segundos]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ConverTime(40000));
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 10-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Pienso que seria mejor hacer esto
Ya, a eso me refería con lo del Format, pero la que ha expuesto dec viene al dedillo, ya que el tipo TDateTime no es más que un float donde la unidad es un día, así:

una hora = 1/24
un minuto = 1/(24*60)
un segundo = 1/(24*60*60)
un mes = 30

y así...
Responder Con Cita
  #7  
Antiguo 10-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por ixMike Ver Mensaje
Ya, a eso me refería con lo del Format, pero la que ha expuesto dec viene al dedillo, ya que el tipo TDateTime no es más que un float donde la unidad es un día, así:

una hora = 1/24
un minuto = 1/(24*60)
un segundo = 1/(24*60*60)
un mes = 30

y así...
Si, pero le veo un pequeño detalle, que pasa si la cantidad de segundos sobrepasa las 24 horas

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 10-04-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bien apuntado egostar. A mí me pareció muy elegante la solución (ya he dicho que la encontré, no es "mía") pero, me temía que habría implicaciones... y todavía creo que podría haber más. Creo que habría que esperar a que quien inició el hilo comente algo a todo esto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 10-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Hola,

Bien apuntado egostar. A mí me pareció muy elegante la solución (ya he dicho que la encontré, no es "mía") pero, me temía que habría implicaciones... y todavía creo que podría haber más. Creo que habría que esperar a que quien inició el hilo comente algo a todo esto.
Yo se amigo Dec, y en verdad que eso soluciona cualquier problema sin tanto rollo y efectivamente es elegante, pero ya sabes como soy siempre veo el lado malo de las cosas

Como dices, habrá que esperar al aludido para que nos diga

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 10-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Si, pero le veo un pequeño detalle, que pasa si la cantidad de segundos sobrepasa las 24 horas

Salud OS
Bueno, en ese caso, el detalle sería mostrar los días, ¿no?

Vamos, al menos yo lo haría así en mis aplicaciones. Pero eso ya sería entrar en cuestión de gustos...
Responder Con Cita
  #11  
Antiguo 10-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
SOLUCIONADO

Utilice este procedimiento:

Código Delphi [-]
function ConverTime(Seconds: Integer): string;
var Horas,Minutos,Segundos:integer;
begin
  Horas   := Seconds div 3600;
  Minutos := (Seconds - (Horas*3600)) div 60;
  Segundos := (Seconds - (Horas*3600)) mod 60;
  Result:= Format('%.*d',[2,Horas])+':'+Format('%.*d',[2,Minutos])+':'+Format('%.*d',[2,Segundos]);
end;

Con respecto a los dias, no los necesito, puesto a que por otro lado, el ingreso de datos esta limitado a un máximo de 24hs.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #12  
Antiguo 10-04-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por mamu Ver Mensaje
Con respecto a los dias, no los necesito, puesto a que por otro lado, el ingreso de datos esta limitado a un máximo de 24hs.
En ese caso, la mejor opción es la que mostró nuestro amigo dec, sin tantas vueltas

Yo me complique la vida, pensando que pudiese haber cantidades mayores a 24 horas, por lo que usar TimetoStr() no iba a ser correcto y esto por el número de segundos que colocaste en tu primer intervención.

tiempototal:=125487770;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #13  
Antiguo 10-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
En ese caso, la mejor opción es la que mostró nuestro amigo dec, sin tantas vueltas

Yo me complique la vida, pensando que pudiese haber cantidades mayores a 24 horas, por lo que usar TimetoStr() no iba a ser correcto y esto por el número de segundos que colocaste en tu primer intervención.

tiempototal:=125487770;

Salud OS
Sin embargo, si convierto un valor de hora 0, la función TimeToStr, me devuelve 12:XX:XX:xm, y como lo estoy usando para la duración de archivos de audio, tampoco me interesa el AM/PM. Ojo, he probado una y otra vez, y siempre me pasa lo de las 12hs.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #14  
Antiguo 10-04-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
¿Se han fijado en el código de TimeToStr?

Bye
Responder Con Cita
  #15  
Antiguo 10-04-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Digo yo...
¿Y no será mejor usar la función que la VCL tiene para eso?

Código Delphi [-]
  res := IncSecond(tiempototal, 125487770);

DateUtils en el uses, of course.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 10-04-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
¿Se han fijado en el código de TimeToStr?
Puede ser... entonces mejor usar FormatDateTime, con el formato 'hh:nn:ss'...

Código Delphi [-]
function SecondsToTime(seconds: Integer) : TTime;
begin
  result := (seconds / (24 * 60 * 60));
end;

(* *)

begin
  ShowMessage( FormatDateTime('hh:nn:ss', SecondsToTime(60) ) );
end;



Salu2
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con la función Right Javi2 SQL 5 27-12-2007 21:59:57
Ayuda con la funcion Rtf2html en php lazar PHP 2 17-02-2007 20:24:38
ayuda con funcion mysql_num_rows estibaliz2006 PHP 1 15-11-2006 15:40:01
Ayuda con Funcion edelphi Varios 3 17-07-2006 06:24:03
Ayuda con una función McRight2k Varios 1 13-08-2003 21:47:04


La franja horaria es GMT +2. Ahora son las 21:41:33.


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