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 03-09-2003
User_Baja_2 User_Baja_2 is offline
Miembro
 
Registrado: may 2003
Posts: 126
Poder: 21
User_Baja_2 Va por buen camino
Como restar fechas

Como se puede restar fechas, tengo dos campos TTime y necesito saber la diferencia y grabarlo en un campo del mismo tipo.

El único modo que encuentro de grabarlo es

FieldByName('CampoHora').asDateTime <- Pero tb me guarda la fecha con el año 1889

guardo el format hh:nn:ss pero la resta no es buena.

¿Alguna solución?
Responder Con Cita
  #2  
Antiguo 03-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Es bastante confuso tu enunciado, pero: Si quieres trabajar con fechas, solo tienes que darle importancia a la parte entera de los tipos TDateTime, si quieres trabajar exclusivamente con horas, minutos y segundos, tienes que utilizar la parte decimal del TDateTime. La fecha 0 es '30/12/1899' pero eso a ti no te importa si trabajas con horas.
Las funciones aritméticas de este tipo de datos, te garantizo que funcionan en forma correcta.

¿Porque no nos aclaras tu duda?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 05-09-2003
User_Baja_2 User_Baja_2 is offline
Miembro
 
Registrado: may 2003
Posts: 126
Poder: 21
User_Baja_2 Va por buen camino
El caso que se me representa es el siguiente:

- Una Variable Hora (VbleHora) del tipo TTime
Le asigno el valor de un campo Hora

VbleHora= Tabla.FieldByName('CampoHora').asDateTime;
(uso DateTime pq no existe el asTtime)

repito la operación con una 2º variable y otro segundo campo Hora

VbleHora2=Tabla.FieldbyName('CampoHora2').asDateTime;

En una variable del tipo de datos TTime guardo la diferencia de la vblehora2 menos vblehora

Quedando:
VbleResultadoHora=VbleHora2-VbleHora

el resultado de esta variable lo guardo en un 3º campo del tipo Hora con el formato: "hh:nn:ss"

Si por ejemplo tengo estos datos:

VbleHora -> 12:00:33
VbleHora2-> 12:00:34
El restultado me da: VbleResultadoHora -> 00:00:00

Porque hay solamente 512 Milisegundos de diferencia

¿Cómo puedo visualizar correctamente el dato en el 3º campo?

Esperando que ahora pueda comprender mejor mi duda, les agradezco de antemano su ayuda

Gracias
Responder Con Cita
  #4  
Antiguo 08-09-2003
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
Buenas el problema que tienes es que en TDateTime se estan almacenando tambien los milisegundos y tu quieres que la resta sea a nivel de SEGUNDO, pues bien... hagamos la resta eliminando todo lo que no queremos


Var
HoraInicio_Date : TDateTime;
HoraFin_Date : TDateTime;
HoraResultado_Date : TdateTime;
Fecha :String;
HoraInicio_Str : String;
HoraFin_Str : String;
Begin

//Primero me guardo un String con la Fecha que luego usare

Fecha := FormatDateTime('dd/mm/yyyy', now);

//Guardamos las fechas en el formato que queremos

HoraInicio_str := FormatDaeTime('hh:nn:ss', horaInicio_Date);
HoraFin_str := FormatDaeTime('hh:nn:ss', horaFin_date);

//Ahora movemos los Strings de nuevo a los DatTime
//De manera que los Milisegundos iguales en ambos
//al igual que el dia, mes y año

HoraInicio_Date := StrToDate(Fecha + ' '+HoraInicio_Str);
HoraFin_Date := StrToDate(Fecha + ' '+HoraFin_Str);

//Restamos ambos

HoraResultado_Date := HoraFin_Date - HoraInicio_Date;

// Si mostramos su valor en caso de que los iniciales fuesem
// 10/09/2003 10:14:25 430 y 10/09/2003 10:14:26 110
//Al hacer un formatDateTime con mascara 'hh:nn:ss' seria algo así

ShowMessage(FormatDateTime('hh:nn:ss', HoraResultado_date)); //Seria 00:00:01

end;

Esta en muchos pasos para que se vea claro pero lo puedes resumir...

Begin

HoraResultado_date := StrToDate(FormatDateTime(Fecha+' '+'hh:nn:ss', HoraInicio_Date )) - StrToDate(FormatDateTime(Fecha+' '+'hh:nn:ss', HoraFin_Date ))

End;

Espero que te sirva de ayuda y si tienes algún problema no dudes en preguntar, que aquí estamos todos para ayudarnos...
Responder Con Cita
  #5  
Antiguo 08-09-2003
bismarito bismarito is offline
Miembro
 
Registrado: jun 2003
Ubicación: Tarija - Cercado
Posts: 47
Poder: 0
bismarito Va por buen camino
lo que yo hice es bastante simple:

procedure resta(hora1,hora2:TTime):TTime;
begin
result:=TimeOf(hora2)-TimeOf(hora1);
end;

....

la función TimeOf te extrae, solamente la hora del formato datetime

el resultado ya lo puedes emplear por ejemplo en interbase existe un tipo de datos time y lo puedes almacenar tranquilamente ahi.


Espero te sirva
saludos desde Tarija, Bolivia
__________________
Bismarito
hoy, que tan bueno quiero ser!!
Responder Con Cita
  #6  
Antiguo 10-09-2003
User_Baja_2 User_Baja_2 is offline
Miembro
 
Registrado: may 2003
Posts: 126
Poder: 21
User_Baja_2 Va por buen camino
No encuentro esta función timeof en el delphi, uso el delphi 5. puede ser que sea de una versión posterior?

Gracias
Responder Con Cita
  #7  
Antiguo 06-12-2007
tifosi_loco tifosi_loco is offline
Registrado
 
Registrado: oct 2007
Posts: 2
Poder: 0
tifosi_loco Va por buen camino
Consulta... Urgente... al menos para mi lo es :)

Buenas noches, ya que encontrè este hilo de fechas aprovecho a plantear mi duda.
Tengo que calcular la cantidad de dias transcurridos entre una fecha y otra, y luego esa cantidad de dias multiplicdarla por un valor... por ejemplo:

(07-12-2007) - (05-12-2007)... esto sería igual a 2 días... luego esos dos dias los multiplico por...x... pero bueno, esa parte es facil jeje

cómo hago para obtener ese 2 ??? alquien tiene idea?

Gracias!
Responder Con Cita
  #8  
Antiguo 06-12-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Puedes usar directamente la función "DaysBetween"...
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 17-09-2011
luisraad luisraad is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 54
Poder: 13
luisraad Va por buen camino
Restar Fechas

buenas tardes

amigos tengo un prblema, he navegado por todos los foors de delphi y no entiendo es nada...

tengo una base de datos hecha en access y conectada a delphi 7 meiante componentes ADO, lo que quiero es hacer una forma que me maneje la cuarentena de los porductos (medicamentos), osea que mi tabla cuarentena en accses tiene los campos, nombremed, f_caducidad, donde la f_caducidad es la fecha de vencimiento que es la que se inserta a memoento de ingresar el medicamento a la base de datos la cual es la que quiero restar a un datetimepicker ((fecha del sistema)) y poner condiciones qe me los liste justo 20 dias antes de su vencimiento.

me explicaron que con parametros se podia pero no consigo hacerlo... no coloco lineas de codigos porque hasta el momento no he dado con el codigo

posdata: soy novato solo tengo 2 semanas en esto y no entiendoo nada
Responder Con Cita
  #10  
Antiguo 17-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola luisraad, bienvenido a clubdelphi, por favor, como todos los nuevos usuarios, es aconsejable que leas nuestra guía de estilo, gracias por tu colaboración.
Responder Con Cita
  #11  
Antiguo 17-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veo que ya has creado un nuevo hilo para el tema, perfecto
Responder Con Cita
  #12  
Antiguo 17-09-2011
luisraad luisraad is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 54
Poder: 13
luisraad Va por buen camino
ya todo bien cero rollo.. es que no sabia como postear una pregunta
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


La franja horaria es GMT +2. Ahora son las 09:11:24.


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