FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
|||
|
|||
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 |
#5
|
||||
|
||||
Cita:
Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
|||
|
|||
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. Última edición por LoBo2024 fecha: 06-09-2004 a las 13:12:52. |
#7
|
|||
|
|||
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
|
#8
|
|||
|
|||
Muchas gracias al principio me fallaba pero me faltaba añadir los units necesarios el dateutils y el sysutils gracias por tu ayuda
|
|
|
|