Delphi - Problemas con Fechas

 
Vista:

Problemas con Fechas

Publicado por Guido (2 intervenciones) el 26/02/2009 14:40:31
Hola que tal!
Tengo el siguiente problema!
En una aplicacion tengo que comparar la fecha ingresada por el usuario mediante un componente DateTimePicker y compararla con el campo de una tabla donde se almacenan fechas.... El problema surge que cuando compara, lo hace mal, y yo observo los valores en el depurador y los valores de fecha de la tabla esta bien, al comparar me los muestra con el formato "dd, mm, aaaa", tal como estan en la tabla, pero los valores de las fechas ingresadas en el componente DateTimePicker me los muestra con decimales, numeros muy grandes. Quisiera saber la causa. Ahi al comparar hace cualquier cosa.
Por ejemplo en el Datetimepicker ingreso 03/09/2002 y al compararlo con otra fecha me muestra en el depurador que la variable tiene el valor "37290,394725". Porque ocurre esto? alguien me puede ayudar?!

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con Fechas

Publicado por juancho (193 intervenciones) el 26/02/2009 15:04:00
Hola, primeramente el numero que te muestra es un float codificado de la fecha, es equivalente, segundo tienes que usar la funcion CompareDate que esta en DateUtils que es mas segura, suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:Problemas con Fechas

Publicado por E.T. (1244 intervenciones) el 26/02/2009 17:21:35
Si bien tu base de datos te muestra dd/mm/yyyy, normalmente las bases de datos guardan en mm/dd/yyyy, puede que sea eso lo que impida que se haga bien la comparación.
hay una variable de sistema que guarda el formato de la fecha es esta:

ShortDateFormat, a esta variable le puedes dar el formato que desees, y así todas las fechas que manejas en delphi toman ese formato, digamos:

ShortDateFormat:='mm/dd/yyyy';
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Fechas

Publicado por Master Delphi Peru (1 intervención) el 26/02/2009 18:48:02
En Delphi la fecha, la hora y fecha y hora (TDate, TTime y TDateTime) en realidad son float, mira el help. La comparación la haces en Delphi o en la base de datos? puesdes formatear la fechausando FormatDate
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Fechas

Publicado por Guido (2 intervenciones) el 27/02/2009 11:09:40
Hola, gracias por tomarse el tiempo para ayudarme... quizas para uds. sea una pavada, pero para mi la verdad que no, porque soy novato.
A la comparacion de fechas la hago en Delphi, no la hago en la BD como me preguntaban por ahi... y he leido en la ayuda algo de que Delphi la almacena con otros formatos a las fechas (como tambien por ahi me respondieron y agradezco)... y que tambien depende de como este configurado la fecha en el Panel de Control... y que habria que usar algunas funciones especificas para el tratamiento de fechas, pero me gustaria que me digan como hacerlo...

Les pego el codigo a ver si me pueden ayudar, asi es mas claro...

***************////////////////
procedure TForm1.BitBtn1Click(Sender: TObject);
var
totaldias: integer;
entrega: real;
fechapago1: tdate

begin
totaldias:= 0;
entrega1 := strtofloat(edit3.Text);
fechapago1:=datetimepicker1.date;
interes:=0;

table1.First;

repeat
begin
if fechapago1 <= table1.Fields[2].value then
begin
totaldias:= daysbetween(fechapago1,table1.Fields[1].Value);
interes:= interes + totaldias * table1.Fields[5].value;

******************///////////////

La BD contiene una tabla donde yo almaceno entre otros datos, fechas y numeros decimales pertenecientes a los intereses acumulados de esos periodos de fecha....

Yo lo que hago es comparar la fecha que me ingreso el Usuario en el componente DateTimePicker1 con el campo de la tabla donde almaceno las fechas.... (table1.Fields[2].value ).... y cuando yo lo voy depurando y me detengo a ver los valores que toman las variables, fechapago1 (que almacena lo ingresado en el DateTimePicker1) me muestra un numero decimal muy grande... y compara lo siguiente:

if fechapago1 <= table1.Fields[2].value then

if 39871,331678 <= 30/09/2002 then ....

¿Porque diablos si yo ingrese 27/02/2009 en el DateTimePicker, y lo almaceno en fechapago1, al compararlo con el campo de la tabla me muesta ese numero tan largo?...

Se entendio algo ahora?

Por favor a ver si me pueden ayudar.... :)

Muchas Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:Problemas con Fechas

Publicado por E.T. (1244 intervenciones) el 27/02/2009 17:12:47
Bueno, en realidad el como vez el valor de la variable no importa, pues el tipo TDate es un Double, ahora lo que hay que hacer es que el formato de las dos fechas sea el mismo.
Para que puedas verificar el valor de fechapago1, puedes hacer esto

ShowMessage(DateToStr(fechapago1));
con esto ves que la fecha está correcta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con Fechas

Publicado por celizo (77 intervenciones) el 28/02/2009 02:02:09
Lo que sugerio que hagas es que el valor de la tabla donde esta la fecha se la asignes a una variable de tipo tdate.
Despues la comparas con la fecha que deseas.
Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar