Consultar intervalo entre data e hora cadastrados no ACCESS+DELPHI

Delphi

Banco de Dados

SELECT

16/07/2020

Olá pessoal,

Estou utilizando o bando de dados access em um programa que estou desenvolvendo com o Delphi. No access eu tenho uma tabela chamada "CADASTRO" que possui 4 informações, sendo elas: DATA_INICIAL, DATA_FINAL, HORA_INICIAL, HORA_FINAL.

Gostaria de saber como faço para pegar esses dados no banco de dados e consultar o intervalo entre eles? No caso, eu quero consultar o intervalo entre a data final e a data inicial (em dias). E em outro momento também quero consultar o intervalo entre a hora final e a hora inicial.

Por exemplo, suponha que as informações sejam:

DATA_INICIAL : 10/09/2019
DATA_FINAL: 15/09/2019
HORA_INICIAL: 10:20:12
HORA_FINAL: 12:00:00

Logo o resultado seria:

INTERVALO_DATAS: 5 dias
INTERVALO_HORAS: 02:20:12

Obrigado desde já.
Augusto

Augusto

Curtidas 0

Melhor post

Marcus Pereira

Marcus Pereira

16/07/2020

Boa noite, adicionando ao seu uses a unit System.DateUtils você terá acesso a alguns métodos interessantes para trabalhar datas como:

SecondsBetween(const ANow, AThen: TDateTime)
MinutesBetween(const ANow, AThen: TDateTime)
DaysBetween(const ANow, AThen: TDateTime)
WeeksBetween(const ANow, AThen: TDateTime)

Mas para utilizá-los você precisa de duas constantes do tipo TDATETIME que seria algo como "10/09/2019 10:20:12" e "15/09/2019 12:00:00", e com estas funções você poderia extrair a informação desejada.
Considerando que os valores que você informou são strings ficaria mais ou menos assim:

var
DATA_INICIAL : string;
DATA_FINAL: string;
HORA_INICIAL: string;
HORA_FINAL: string;
datahorainicial : TDateTime;
datahorafinal : TDateTime;
begin
DATA_INICIAL := '10/09/2019';
DATA_FINAL := '15/09/2019';
HORA_INICIAL := '10:20:12';
HORA_FINAL := '12:00:00';

datahorainicial := strtodatetime(DATA_INICIAL+' '+HORA_INICIAL);
datahorafinal := strtodatetime(DATA_FINAL+' '+HORA_FINAL);

com isto você já conseguirá usar as funções da seguinte maneira:

SecondsBetween(datahorainicial , datahorafinal)

e a partir dos segundos você faz as conversões para os valores desejados, bastaria apenas fazer alguns calculos.

A intenção aqui é te dar o caminho a seguir e não a resposta mastigada se me entende, espero que ajude.
GOSTEI 1

Mais Respostas

Augusto

Augusto

16/07/2020

Boa noite, adicionando ao seu uses a unit System.DateUtils você terá acesso a alguns métodos interessantes para trabalhar datas como:

SecondsBetween(const ANow, AThen: TDateTime)
MinutesBetween(const ANow, AThen: TDateTime)
DaysBetween(const ANow, AThen: TDateTime)
WeeksBetween(const ANow, AThen: TDateTime)

Mas para utilizá-los você precisa de duas constantes do tipo TDATETIME que seria algo como "10/09/2019 10:20:12" e "15/09/2019 12:00:00", e com estas funções você poderia extrair a informação desejada.
Considerando que os valores que você informou são strings ficaria mais ou menos assim:

var
DATA_INICIAL : string;
DATA_FINAL: string;
HORA_INICIAL: string;
HORA_FINAL: string;
datahorainicial : TDateTime;
datahorafinal : TDateTime;
begin
DATA_INICIAL := '10/09/2019';
DATA_FINAL := '15/09/2019';
HORA_INICIAL := '10:20:12';
HORA_FINAL := '12:00:00';

datahorainicial := strtodatetime(DATA_INICIAL+' '+HORA_INICIAL);
datahorafinal := strtodatetime(DATA_FINAL+' '+HORA_FINAL);

com isto você já conseguirá usar as funções da seguinte maneira:

SecondsBetween(datahorainicial , datahorafinal)

e a partir dos segundos você faz as conversões para os valores desejados, bastaria apenas fazer alguns calculos.

A intenção aqui é te dar o caminho a seguir e não a resposta mastigada se me entende, espero que ajude.



Obrigado!
GOSTEI 0
POSTAR