Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DateTimePicker: problema comparando fechas (https://www.clubdelphi.com/foros/showthread.php?t=8324)

Tomás 17-03-2004 19:35:45

DateTimePicker: problema comparando fechas
 
Hola a todos:

Al comparar dos fechas, una guardada en un registro con otra de un DateTimePicker, siendo la misma fecha no las considera iguales.

Así no funciona cuando las fechas son iguales:

rFechaPrimero := DM.IBDSContaFECHA.AsDateTime; //del registro
rFecha := DTPFecha.Date; //del DTPicker
if rFechaPrimero >= rFecha then
Application.MessageBox('La fecha debe ser mayor...','Aviso',mb_Ok+mb_IconStop);

Añadiendo StrToDate(DateToStr( )) al DTPicker si funciona:

rFechaPrimero := DM.IBDSContaFECHA.AsDateTime;
rFecha := StrToDate(DateToStr(DTPFecha.Date)); //<---¿?
if rFechaPrimero >= rFecha then
Application.MessageBox('La fecha debe ser mayor...','Aviso',mb_Ok+mb_IconStop);

¿Por qué? ¿Estoy haciendo algo mal? ¿Influirá la hora del DTPicker?

Gracias. Tomás.

roman 17-03-2004 19:41:38

Puede tener que ver con el hecho de que a fin de cuentas un TDateTime es de tipo Double y las comparaciones entre valores double no siempre son lo que se espera debido a la representación interna de dichos valores.

Puedes usar la función CompareDateTime de la unidad DateUtils para tal efecto.

// Saludos

jachguate 17-03-2004 20:11:16

Cuando comparas dos TDateTime no compara solamente la fecha... sino fecha y hora. Si queres comparar únicamente las fechas, simplemente truncá ambos valores con trunc(fecha).

Hasta luego.

;)

Tomás 17-03-2004 21:06:22

He estado mirando la función "CompareDateTime", y por lo que puedo entender, ya que mi inglés no es muy voyante, compara también hasta los mislisegundos, pero he visto y probado "CompareDate" que funciona perfectamente.

CompareDate(FechaUno,FechaDos) devuelve
-1 si FechaUno es menor
0 si son iguales
1 si FechaDos es mayor

Probaré ahora lo que apunta Jackguate: Trunc(fecha).

Muchisimas gracias a los dos.
Tomás

jachguate 17-03-2004 21:39:41

Cita:

Empezado por Tomás
lo que apunta Jackguate

Dado que no es la primera vez que lo veo... solo apuntar que mi nickname es jachguate...

Saludos. ;)

LoBo2024 06-09-2004 11:42:10

Retomo este hilo ya q no me ha aclarado el tema estoy intentando hacer que si la fecha es superior a una cierta fecha quiero q la aplicacion se cierre, pero no consigo q me cierre la aplicación

procedure TPrincipal.FormCreate(Sender: TObject);
begin
if CompareDate(Trunc(Date),Trunc(StrToDate('05/08/2004'))) = 1 then Close;
end;

Ese es el codigo q yo tengo si alguien me puede decir lo q hago mal, le estaria muy agradecido.

Gracias por adelantado.

__cadetill 06-09-2004 12:13:08

No lo pongas en el OnCreate del formulario principal, sino en el DPR del proyecto y, si es necesario ejecuta el Application.Run y, sino, no

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  if CompareDate(Trunc(Date),Trunc(StrToDate('05/08/2004'))) <> 1 then 
    Application.Run;
end.

LoBo2024 06-09-2004 12:22:13

Muchas gracias al principio me fallaba pero me faltaba añadir los units necesarios el dateutils y el sysutils gracias por tu ayuda ;)


La franja horaria es GMT +2. Ahora son las 01:16:35.

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