Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Restar horas en formato string (https://www.clubdelphi.com/foros/showthread.php?t=69234)

lbidi 03-08-2010 17:46:05

Restar horas en formato string
 
Hola amigos..

Resulta que tengo 2 horas en formato string. ej. 22-10-03 y 23-10-05 y
necesito la diferencia en segundos entre ellas.

Busque una manera de convertirlas y usar las funciones de delphi, pero no he logrado avanzar.

Alguna sugerencia ??

Gracias

luisgutierrezb 03-08-2010 19:53:30

separalos en horas minutos y segundos y con la funcion encodetime conviertes los valores, y con una resta normal y la funcion formatdatetime te muestra la diferencia

rrf 03-08-2010 23:50:14

Hola.
Aquí tienes una posible solución.
Lo probé y funcionó bien.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  hh1, mm1, ss1, hh2, mm2, ss2, hh3, mm3, ss3, nada : word ;
  TotalSegundos : integer ;
  aa, bb : string ;
  Tiempo1, Tiempo2, TFinal : TDateTime ;
begin

  aa := '20-15-03' ;
  hh1 := strtoint ( copy ( aa, 1, 2 ) ) ;
  mm1 := strtoint ( copy ( aa, 4, 2 ) ) ;
  ss1 := strtoint ( copy ( aa, 7, 2 ) ) ;
  Tiempo1 := EncodeTime( hh1, mm1, ss1, 0 ) ;

  bb := '22-18-09' ;
  hh2 := strtoint ( copy ( bb, 1, 2 ) ) ;
  mm2 := strtoint ( copy ( bb, 4, 2 ) ) ;
  ss2 := strtoint ( copy ( bb, 7, 2 ) ) ;
  Tiempo2 := EncodeTime( hh2, mm2, ss2, 0 ) ;

  Tfinal  := tiempo2 - Tiempo1 ;

//ShowMessage( TimeToStr ( Tiempo1) +#13+ TimeToStr ( Tiempo2) +#13+ TimeToStr ( Tfinal)  );

  DecodeTime( Tfinal, hh3, mm3, ss3, nada );
  TotalSegundos := hh3 * 3600 + mm3 * 60 + ss3 ;
  ShowMessage( 'Segundos: '+ inttostr ( TotalSegundos )  );

end;

Está probado en Delphi 7, aunque creo que funcionará bien en otras versiones.

Le puse valores fijos a los string (aa, bb) para la prueba, pero se puede adaptar para que funcione como una función que recibe los 2 string como parámetros y devuelve el número de segundos.

Salu2.

Ramón.

Neftali [Germán.Estévez] 04-08-2010 11:17:38

En la Unit DateUtils, hay una función llamada SecondsBetween, que te da la diferencia en segundos entre dos fechas.

Creo que irá perfecta para lo que se necesita. ;)

Código Delphi [-]
  hora1 := '20-15-03';
  hora2 := '22-18-09';
  // Cambiar los separadores
  hora1 := AnsiReplaceText(hora1, '-', ':');
  hora2 := AnsiReplaceText(hora2, '-', ':');
  // Diferencia en segundos
  seg := SecondsBetween(StrToTime(hora2), StrToTime(hora1));

Por supuesto, en la misma unit también están las funciones, DaysBetween, HourBetween, MilliseconsBetween,...

lbidi 09-08-2010 21:54:32

Barbaro, muchas gracias a todos y disculpas por tardar en responder.

Saludos.


La franja horaria es GMT +2. Ahora son las 11:37:10.

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