Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como restar fechas (https://www.clubdelphi.com/foros/showthread.php?t=3362)

User_Baja_2 03-09-2003 22:25:24

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?

delphi.com.ar 03-09-2003 23:02:11

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!

User_Baja_2 05-09-2003 14:24:55

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

champy 08-09-2003 20:18:08

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...

bismarito 08-09-2003 22:24:14

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

User_Baja_2 10-09-2003 15:48:10

No encuentro esta función timeof en el delphi, uso el delphi 5. puede ser que sea de una versión posterior?

Gracias

tifosi_loco 06-12-2007 04:20:10

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!

delphi.com.ar 06-12-2007 15:49:46

Puedes usar directamente la función "DaysBetween"...

luisraad 17-09-2011 19:37:01

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

Casimiro Notevi 17-09-2011 20:21:40

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.

Casimiro Notevi 17-09-2011 20:24:08

Veo que ya has creado un nuevo hilo para el tema, perfecto :)

luisraad 17-09-2011 21:58:47

ya todo bien cero rollo.. es que no sabia como postear una pregunta


La franja horaria es GMT +2. Ahora son las 14:06:02.

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