Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   fecha dentro de un periodo (https://www.clubdelphi.com/foros/showthread.php?t=74534)

fabriciof 24-06-2011 11:03:33

fecha dentro de un periodo
 
Hola estimados amigos,

Estoy escribiendo un programa para procesar datos de una base de datos access, para eso estoy usando delphi 2007 un ADOconection y un ADOTable.

la base de datos contiene registros cada 10 min y el programa debe acumularlos para hallar el total horario, pero los registros no estan siempre cada 10 min, algunas veces no existen registros o salta algunos.

entonces genero las fechas y horas desde el primer dia al ultimo dia. Entonces leo las fechas y datos de la base de datos y los localizo en en el preiodo correspondiente. Funciona correctamente pero de pronto leo un registro e.i

7/06/1998 9:10:00 am, el periodo correspondiente es 7/06/1998 9:00:00 am-7/06/1998 10:00:00 am pero el programa no introduce el valor en el intervalo, dice que es mayor?

puede ser este un problema de formato?

muchas gracias

ecfisa 24-06-2011 13:32:24

Hola fabricio.

El problema se presenta por que es muy improbable que hagas la toma de tiempo exáctamente en '7/06/1998 9:10:00 am'.
Normalmente obtenes un valor como '7/06/1998 9:10:00,15 am', mayor y por lo tanto no comprendido en los límites del período.

Si no te importa tanta exactitud podrías hacer:
Código Delphi [-]
const
  AJUSTE = 1000000;
var
  PeriodoIni, PeriodoFin, Toma: TDateTime;
begin
  // valores arbitrarios para el ejemplo
  PeriodoIni:= StrToDateTime('7/06/1998 9:10:00 am');  
  PeriodoFin:= StrToDateTime('7/06/1998 9:10:00 am');
  PeriodoIni:= Trunc(PeriodoIni*AJUSTE)/AJUSTE;    // hh:mm:ss
  PeriodoFin:= Trunc(PeriodoFin*AJUSTE)/AJUSTE;    // hh:mm:ss
  // valor a evaluar
  Toma:= StrToDateTime('7/06/1998 9:10:00,47 am'); // mayor en ,47 
  Toma:= Trunc(Toma*AJUSTE)/AJUSTE;                // hh:mm:ss
  if (Toma >= PeriodoIni) and (Toma <= PeriodoFin) then
   ShowMessage('Comprendida en el período')
  else
   ShowMessage('No comprendida en el período');
end;
De este modo estarías evaluando sólamente horas, minutos y segundos.


Saludos.


La franja horaria es GMT +2. Ahora son las 09:30:36.

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