Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Reloj de Tiempo entre dos Fechas TDateTime (https://www.clubdelphi.com/foros/showthread.php?t=95774)

Efren2006 31-07-2022 22:11:00

Reloj de Tiempo entre dos Fechas TDateTime
 
Buenas Tardes

Existirá alguna Función de DELPHI que me Retorne tipo Reloj el Tiempo entre 2 fechas TDatetime, me explico;

Si los Valores Fuera
Código:

FechaA:='29/07/2022 13:00:00'
y
Código:

FechaB:='30/07/2022 16:10:50'
Retornara el Tiempo total Transcurrido, algo así: 0 Años 0 Meses 1 Dias 3 Horas 10 Minutos 50 Segundos

Saludos

Neftali [Germán.Estévez] 01-08-2022 09:00:13

Hola.
No comentas qué versión de dlephi utilizas.
Revisa la unit DateUtils, donde ncontrarás muchas funciones de tratamiento de fechas/horas.

https://docwiki.embarcadero.com/Libr...stem.DateUtils

Directamente no hay ninguna (creo recordar) que haga lo que necesitas, pero hay varias estratégias para conseguirlo.
Por ejemplo, restar las fechas para obtener la diferencia en segundos y a partir de ahí sacer los segundos, minutos, horas,...

Otra opción es revisar las funciones ?????Between del link anterior y ver si con ellas puedes obtenerla.

duilioisola 01-08-2022 15:32:10

Dado que TDateTime internamente es un número puedes restar uno de otro y luego mostrarlo formateado...

Algo así:

Código Delphi [-]
var
  Desde : TDateTime;
  Haste : TDateTime;
  TiempoTranscurrido : string;
begin
  Desde := EncodeDateTime(2021, 10, 12, 10, 20, 30, 0);
  Hasta := EncodeDateTime(2022, 11, 15, 11, 22, 33, 0);

  TiempoTranscurrido := FormatDateTime('yy años mm meses dd dias hh horas nn minutos ss segundos', (Hasta - Desde));
end;

Efren2006 03-08-2022 19:30:06

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547697)
Hola.
No comentas qué versión de dlephi utilizas.
Revisa la unit DateUtils, donde ncontrarás muchas funciones de tratamiento de fechas/horas.

https://docwiki.embarcadero.com/Libr...stem.DateUtils

Directamente no hay ninguna (creo recordar) que haga lo que necesitas, pero hay varias estratégias para conseguirlo.
Por ejemplo, restar las fechas para obtener la diferencia en segundos y a partir de ahí sacer los segundos, minutos, horas,...

Otra opción es revisar las funciones ?????Between del link anterior y ver si con ellas puedes obtenerla.

Buenas Tardes Neftali

Uso Delphi 2009

Si entiendo lo de las estrategias,, pero como a veces, ya me ha pasado que me pongo hacer funciones, y luego resulta que ya Delphi las tienen implementadas...

Gracias por tu Tiempo... Siempre Atento a nuestras inquietudes ^\||/

Efren2006 03-08-2022 19:31:02

Cita:

Empezado por duilioisola (Mensaje 547714)
Dado que TDateTime internamente es un número puedes restar uno de otro y luego mostrarlo formateado...

Algo así:

Código Delphi [-]
var
  Desde : TDateTime;
  Haste : TDateTime;
  TiempoTranscurrido : string;
begin
  Desde := EncodeDateTime(2021, 10, 12, 10, 20, 30, 0);
  Hasta := EncodeDateTime(2022, 11, 15, 11, 22, 33, 0);

  TiempoTranscurrido := FormatDateTime('yy años mm meses dd dias hh horas nn minutos ss segundos', (Hasta - Desde));
end;

Buenas Tardes duilioisola

Lo voy a Probar .... Gracias ^\||/

escafandra 07-08-2022 13:35:26

En su día respondí con una función que calculaba la diferencia en años, meses y días a esta pregunta: Obtener Dias, Meses y Años a partir de una cantidad de días, pero se puede modificar para añadir también la diferencia de horas, minutos y segundos entra las dos fechas:


Hay que dar solución al problema de meses con diferente número de días y años bisiestos.
Código Delphi [-]
function RestaFechas(D1, D2:TDate): String;
var
  i: integer;
  dia0, mes0, ano0: WORD;
  dia, mes, ano: WORD;
  dias, meses, anos: WORD;
  D: integer;
  H: Extended;
begin
  D:= Ceil(D2)-Ceil(D1);
  H:= D2-D1-D;
  dias:= 0;
  meses:= 0;
  anos:= 0;

  DecodeDate(D1, ano0, mes0, dia0);
  DecodeDate(D1, ano, mes, dia);
  for i:= 0 to D-1 do
  begin
   D1:= D1+1;
   inc(dias);
   DecodeDate(D1, ano, mes, dia);
   if dia = dia0 then
   begin
     inc(meses);
     dias:= 0;
     if mes = mes0 then
     begin
       meses:= 0;
       inc(anos);
     end;
   end;
  end;
  Result:= IntToStr(anos) + ' años, ' +  IntToStr(meses) + ' meses, ' + IntToStr(dias) + ' dias y ' + TimeToStr(H) + ' horas';
end;


Saludos.


La franja horaria es GMT +2. Ahora son las 11:22:40.

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