![]() |
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. |
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 |
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. ;) |
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 |
Cita:
Saludos. ;) |
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. |
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
|
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 15:46:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi