Como converto uma Data+hora em um numero Inteiro?

Delphi

06/01/2015

Procurei na SysUtils e na DateUtils por alguma função que convertesse um data (Now ou Today) com minutos e segundo para um numero inteiro e não encontrei.

Alguém sabe me dizer onde encontro alguma função que faça esta conversão?
Sergio Santos

Sergio Santos

Curtidas 0

Melhor post

Renato Rubinho

Renato Rubinho

06/01/2015

Buenas,

Como a data já é tratada como inteiro e a hora/minuto/segundos/milésimos são os decimais, uma sugestão é você gravar o valor em segundos.

Ex:06/01/2015T17:20:30

30 segundos
20 minutos >> 20 * 60 segundos = 1200 segundos
17 horas >> 17 * 60 minutos = 1020 minutos >> 1020 minutos * 60 segundos = 61200 segundos
06/01/2015 >> Trunc(now) = 42010 dias >> 42010 * 24 horas = 1008240 horas >> 1008240 * 60 minutos = 60494400 minutos >> 60494400 * 60 segundos = 3629664000 segundos

então:
Data(06/01/2015) = 3629664000 segundos
17 horas = 61200 segundos
20 minutos = 1200 segundos
30 segundos

Somados os valores, você terá a data atual em segundos: 3629726430 segundos

Para retornar o valor no formato decimal inicial (em dias)

Converte em minutos: 3629726430/60 = 60495440,5
Converte em horas: 60495440,5/60 = 1008257,342
Converte em dias: 1008257,342/24 = 42010,72258

FormatDateTime('dd/mm/yyyy hh:nn:ss',42010.72258) = 06/01/2015T17:20:30

Abraççç,
rrubinho
GOSTEI 1

Mais Respostas

Jiraya San

Jiraya San

06/01/2015

Olá Sérgio Santos estou fazendo uns testes aqui e minha situação é a seguinte:
Tenho um DateTimePicker onde clico em uma data e armazeno a mesma em uma variável para ficar por exemplo assim: 06012015 (06/01/2015)
Estou fazendo deste jeito para retornar:
// Data Entra como: 06/01/2015
Label2.Caption := 'Data Sem Barras: ' + StringReplace(DateToStr(DateTimePicker1.Date), '/', EmptyStr, [rfReplaceAll]);
// Data Sai como: 06012015
GOSTEI 0
Jiraya San

Jiraya San

06/01/2015

Estou tentando fazer o inverso agora, pegar este número: 06012015 ou 6012015 e transformar em uma data: 06/01/2015.
Teria uma ideia de como fazer isso?
GOSTEI 0
Sergio Santos

Sergio Santos

06/01/2015

Buenas,

Como a data já é tratada como inteiro e a hora/minuto/segundos/milésimos são os decimais, uma sugestão é você gravar o valor em segundos.

Ex:06/01/2015T17:20:30

30 segundos
20 minutos >> 20 * 60 segundos = 1200 segundos
17 horas >> 17 * 60 minutos = 1020 minutos >> 1020 minutos * 60 segundos = 61200 segundos
06/01/2015 >> Trunc(now) = 42010 dias >> 42010 * 24 horas = 1008240 horas >> 1008240 * 60 minutos = 60494400 minutos >> 60494400 * 60 segundos = 3629664000 segundos

então:
Data(06/01/2015) = 3629664000 segundos
17 horas = 61200 segundos
20 minutos = 1200 segundos
30 segundos

Somados os valores, você terá a data atual em segundos: 3629726430 segundos

Para retornar o valor no formato decimal inicial (em dias)

Converte em minutos: 3629726430/60 = 60495440,5
Converte em horas: 60495440,5/60 = 1008257,342
Converte em dias: 1008257,342/24 = 42010,72258

FormatDateTime('dd/mm/yyyy hh:nn:ss',42010.72258) = 06/01/2015T17:20:30

Abraççç,
rrubinho


Rrubinho, obrigado pelo retorno

Entendi a lógica, mas achei uma função para fazer esta conversão. Vc teria algum exemplo?
GOSTEI 0
Renato Rubinho

Renato Rubinho

06/01/2015

Qual função você achou para isso ?
Um exemplo seria o passo a passo que descrevi.
Você pode criar uma função passando o TDateTime, fazendo os passos e retornando o número e outra com o inverso.
GOSTEI 1
Sergio Santos

Sergio Santos

06/01/2015

Eu ainda não achei nada que me desse este valor.
Vou tentar montar com o passo a passo que vc me passou..
GOSTEI 0
POSTAR