Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2007
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Desesperado al comparar dos fechas - horas

Tengo que comparar dos TDateTime, y no me funciona de ninguna manera, he probado a comprar directamente los dos TDateTime, tambien he probado la funcion CompareDateTime y por ultimo los he pasado a una cadena mediante DateTimeToStr y he comparado las cadenas y sigue sin funcionar. Decir que las fechas son iguales.

Un saludo y gracias.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #2  
Antiguo 07-03-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
A mi siempre me ha funcionado sin problema comparar dos fechas con =, o <>.

A ver si lo que pasa es que tienes dos TDateTime cuya Fecha sea la misma (o distinta) pero la parte horaria te está influyendo en la comparación !

Al indicar TDateTime no sé si has tenido esto en cuenta.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 07-03-2007
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
El formato de un TDateTime creo que es del tipo double; de hecho si asignas a un double la funcion now() te la convierte en fracciones de segundos desde una determinada fecha origen. Como son fracciones de segundos puedes extraer de ella informacion sobre las horas multiplicando y tomando la parte entera. No se si te sirve de ayuda...
Responder Con Cita
  #4  
Antiguo 07-03-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Los TDateTime son valores reales que en la parte entera guardan la fecha y en la decimal la hora. Se opera con ellos como con cualquier otro número, aunque también hay funciones específicas.
Cita:
Unit
System

Delphi syntax:
type TDateTime = type Double;

Description
[...]
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.

Following are some examples of TDateTime values and their corresponding dates and times:

0..........12/30/1899 12:00 am
2.75......1/1/1900 6:00 pm
-1.25.....12/29/1899 6:00 am
35065....1/1/1996 12:00 am
Responder Con Cita
  #5  
Antiguo 07-03-2007
Avatar de Gabar'el Arley
Gabar'el Arley Gabar'el Arley is offline
Registrado
 
Registrado: nov 2005
Ubicación: Curitiba - Brasil
Posts: 5
Poder: 0
Gabar'el Arley Va por buen camino
Cool Mira!

No se muy bien lo que quieres mas tengo un codigo que verifica una data o horario dependiando de como lo haces!


procedure TForm1.Button1Click(Sender: TObject);
var
DT:TStringList;
begin
DT:=TStringList.Create;
DT.LoadFromFile('C:\root.txt');

if
Date >=StrToDate(Copy(DT.Text,1,10))

then
Application.Terminate;


el archivo de texto que contiene la data 'root.txt'
exemplo:

12/02/2007


espero que ayude en algo es una buena forma de comparar!
Responder Con Cita
  #6  
Antiguo 07-03-2007
Avatar de Monchi
Monchi Monchi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Cordoba, Argentina
Posts: 18
Poder: 0
Monchi Va por buen camino
Podes usar esto, asignas hora 0:00 a las fechas que tienen los TDateTimePicker antes de comparar
Código Delphi [-]
   
   tfecha:tdatetime;
 
   tfecha:=dtpdesde.date;
   replacetime(tfecha,encodetime(0,0,0,0));
   dtpdesde.date:=tfecha;
Espero te sirva
Saludos
Responder Con Cita
  #7  
Antiguo 07-03-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Thumbs up ¿Son solo fechas?

La pregunta del millón es: ¿Son solo fechas?; ó es que, hay algo mas que evita que las fechas sean comparables. Pues sí, algunos componentes que editan la fecha devuelven la hora también; o puede ser que, lo estes comparando con un campo de tipo TDateTime y tenga la hora incluida. A mi me pasaron las dos cosas.
Para salir de la duda, trunca ambas fechas y luego compáralas. Así:
Código Delphi [-]
   if Trunc(Fecha.DateTime) < Trunc(Tabla.FieldByName('Partida').AsDateTime) then
      ShowMessage('Ingresaste una fecha menor a la de la tabla');

Espero te sirva. Chau..!
Responder Con Cita
  #8  
Antiguo 08-03-2007
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Lo que tengo que comparar son dos TDateTime con fecha y hora, y como he dicho he probado a compararlo tal cual, compararlas con la funcion "CompareDateTime" y por ultimo he probado a pasarlo a una cadena y comparar las cadenas, que incomprensiblemente y siendo iguales no se comparan bien.

If TDateTime1 = TDateTime2 Then //No funciona

If CompareDateTime(TDateTime1, TDateTime2) = 0 Then //No funciona

c1 := DateTimeToStr(TDateTime1);
c2 := DateTimeToStr(TDateTime2);
If c1 = c2 Then //Tampoco funciona

A ver si alguien tiene idea de porque me pasa esto.
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5
Responder Con Cita
  #9  
Antiguo 08-03-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Me acabo de dar cuenta de un detalle :

Espero que estés comparando los variables correctas de TDateTime de tu aplicación.

Estás mostrando comparaciones entre TDateTime1 y TDateTime2. Supongo que deberías tener declarado en tu programa dos varibales del tipo TDateTime. Algo así como :
Código Delphi [-]
var
  Fecha1, Fecha2 : TDateTime;
  ...

Y la comparación estás haciéndola con Fecha1 y Fecha2 :
Código Delphi [-]
if Fecha1 = Fecha2 then ...

Me desconcierta un poco tu código donde haces la comparación entre TDateTime1 y TDateTime2. Si es una simple cuestión de nomenclatura de tus variables, bien. Pero si no es así, revísalo.

Por otro lado, deberías de asignar los valores de tus variables de fecha y hora a comporar a unos strings de esta manera :
Código Delphi [-]
var
  Aux_String1, Aux_String2 : String
  ...
 
// en algún procedimiento de tu programa
Aux_String1 := FormatDateTime('dd/mm/yyyy hh:nn:ss', Fecha1);
Aux_String2 := FormatDateTime('dd/mm/yyyy hh:nn:ss', Fecha2);
y que expongas aquí los valores que te devuelven Aux_String1 y Aux_String2 para ver tus valores concretos.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #10  
Antiguo 08-03-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Smile Otra alternativa

Utilizando las herramientas provistas por gluglu podemos comparar las fechas y horas como si fueran cadenas. De esta forma yo propongo lo siguiente (que a mi parecer es infalible).
Código Delphi [-]
var  Fecha1, Fecha2: TDateTime;
  Tiempo1, Tiempo2: String;
begin
// Si en Fecha1 guardo la fecha 23/08/1974 y la hora 15:15:00 y
// en Fecha2 guardo la misma fecha pero con un minuto antes.
  Fecha1 := StrToDateTime('23/08/1974 15:15:00');
  Fecha2 := StrToDateTime('23/08/1974 15:14:00');
//  ...
 
// en algún procedimiento de tu programa
  Tiempo1 := FormatDateTime('yyyy/mm/dd hh:nn:ss', Fecha1);
  Tiempo2 := FormatDateTime('yyyy/mm/dd hh:nn:ss', Fecha2);
// Entonces obtendría lo siguiente:
//   Tiempo1 sería igual a: '1974/08/23 15:15:00' y
//   Tiempo2 sería igual a: '1974/08/23 15:14:00' entonces
// ambas cadenas son perfectamente comparables
  ShowMessage('Tiempo1 = ' + Tiempo1 + ' y Tiempo2 = ' + Tiempo2);
  if Tiempo1 = Tiempo2 then
    ShowMessage('Son los mismos tiempos.')
  else
    if Tiempo1 > Tiempo2 then
      ShowMessage('El primer tiempo es mayor.')
    else
      ShowMessage('El segundo tiempo es mayor.');
// Lo correcto es que observes dos ventanas.
// La primera con los datos almacenados en Tiempo1 y Tiempo2; y
// la segunda, con el mensaje 'El primer tiempo es mayor'.
Suerte y espero que te sirva.
Responder Con Cita
  #11  
Antiguo 08-03-2007
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Deberías poner tu código completo.

¿Qué significa "No funciona" para tí?

Porque si no funciona te debe dar algún error, o si no te da error es que si que funciona.

Por lo tanto la conclusión que yo saco, es que sí que funciona pero que no te da el resultado que tu crees que debe dar.

Si es esto así, creo que el error sería que tu piensas que las variables son iguales y en realidad no lo son, o que piensas que son distintas y en realidad son iguales.

Recuerdo vagamente que algún problema de este tipo tuve restando dos fechas y no salía lo que yo pensaba que tenia que salir debido a las diferencias entre Now y Date.

Un saludo.
Responder Con Cita
  #12  
Antiguo 12-03-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Question ¿Hay conclusión?

Bueno..! ¿Qué pasó? ¿Me perdí de algo? ¿A qué conclusión llegamos? ¿Al final, la comparación entre fechas funciona?

....???
Responder Con Cita
  #13  
Antiguo 09-04-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Smile Operación con fechas

Hola, tengo el siguiente problema :
Requiero comparar la fecha de una tabla con la fecha tomada por el sistema.
El campo en la tabla es tipo Date.
La variable que toma la fecha del sistema es tipo String.
Es algo como esto:
fechaArranque:string;
.
.
fechaArranque:=datetostr(date);
Es así como tomo la fecha pero cuando hago esta pregunta:
if (Dmsip.TblSolicituDiarios['FECHA']=fechaArranque then

me presenta el siguiente error:
[Error] UFrmSolicitudPendiente.pas(201): Incompatible types: 'String' and 'Boolean'

Agradezco si alguien me puede guiar.
Responder Con Cita
  #14  
Antiguo 10-04-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Thumbs up Problemas de siempre

Intenta hacer lo siguiente:

Código Delphi [-]
  var fechaArranque: TDate;
  ...
  fechaArranque := Date;
  ...
  if Trunc(Dmsip.TblSolicituDiarios.FieldByName('FECHA').AsDateTime)=fechaArranque then

Suerte y después cuenta cómo te fué...
__________________
Cita:
Cuando respetes al ilustrado y al ignorante, al rico y al pobre, al bello y al feo, estarás muy cerca de la sabiduría, que trasciende lo aparente.

E. Rharo
Responder Con Cita
  #15  
Antiguo 10-04-2007
Avatar de Alejandrina
Alejandrina Alejandrina is offline
Miembro
 
Registrado: mar 2007
Ubicación: Medellin
Posts: 46
Poder: 0
Alejandrina Va por buen camino
Gracias

Gracias...
Solucione el problema de la siguiente manera:
if DmSip.TblSolicituDiarios.Locate('FECHA',vararrayof ([fechaArranque]), []) then
__________________
Alejandrina
Responder Con Cita
  #16  
Antiguo 15-04-2007
juliobuitrago juliobuitrago is offline
Miembro
 
Registrado: jun 2006
Posts: 37
Poder: 0
juliobuitrago Va por buen camino
Units

Tengo una serie de Units.....creo que las de sourceforge, que te hacen todo eso, me dices si las quieres, tira por fernandobuitrago@gmail.com....creo que las puedo distribuir gratis...creo, pues ellas están gratis.
Responder Con Cita
  #17  
Antiguo 19-07-2012
Avatar de DarkBlue
DarkBlue DarkBlue is offline
Miembro
 
Registrado: jun 2010
Posts: 105
Poder: 14
DarkBlue Va por buen camino
muchas gracias amigo pablotech me ha resultado tu metodo infalible al principio no funcionaba por que mi constante de fecha era tdatetime y mis otras fechas eran date! gracias
__________________
Todo es Relativo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparar Horas en SQL Server trex2000 MS SQL Server 3 23-01-2007 21:13:01
Comparar horas en variables vivamotos Firebird e Interbase 3 19-09-2006 22:07:22
Ayuda para comparar Horas JerS Varios 4 21-09-2005 17:06:31
comparar horas noobdelphi Firebird e Interbase 2 27-01-2005 15:55:01
Comparar Horas Novás Varios 3 06-01-2004 11:49:32


La franja horaria es GMT +2. Ahora son las 22:16:13.


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
Copyright 1996-2007 Club Delphi