O ideal seria vc pegar toda a hora transformar para mile, calcular a dif, 
voltar pra "hh:nn:ss.z"

DecodeDateTime(ant, ano, mes, dia, horas, minutos, segundos, milisegundos);
msecs_ant := (( horas  * 3600 ) + (minutos * 60) + segundos ) * 1000) + 
milisegundos;
DecodeDateTime(Now, ano, mes, dia, horas, minutos, segundos, milisegundos);
msecs_ago := (( horas  * 3600 ) + (minutos * 60) + segundos ) * 1000) + 
milisegundos;
label1.caption := MSecToTime( msecs_ago - msecs_ant );
// isso vai calcular a diff em tempo de até 24 horas, pra mais vai ter que 
fazer uma alterações...
// ai é com vc........

end;
function MSecToTime(mSec: Int64): string;
const
   MSecsPerSec = 1000;
   SecsPerDay = 86400;
var
  dt : TDateTime;
begin
   dt := mSec / MSecsPerSec / SecsPerDay;
   Result := Format('%s', [FormatDateTime('hh:nn:ss.z', Frac(dt))]) ;
   while Length(result) < 12 do
      result := result + '0';
end;


Luiz Escobar - Analista/Desenvolvedor:
WEB - HTML/JavaScript/PHP/MySQL
WINDOWS - Delphi/ASSEMBLY/MySQL/xBase
SERVIDORES - CNA IntraNetWare4.11, LINUX-(RedHat9/Suse10.2), Windows 2K/XP
HARBOUR 
--------------------------------------------------------------------------
Borland C++ 5.5.1 (32 bit)
Harbour 1.0.0rc2 Intl. (Rev. 8941)
xHarbour Compile build 1.1.0 (Simplex)
Harbour MiniGUI 1.5 Extended Edition (Build 53a) - 2008.07.07
-------------------------------------------------------------------------------------------


From: William Brum
Sent: Friday, July 18, 2008 3:55 PM
To: delphi-br@yahoogrupos.com.br
Subject: [delphi-br] obter milesimos de segundos de tempo inicial e final...


Amigos,

Preciso da ajuda de voces, pois nãos sei se fiz certo a parada abaixo.

Pego uma

...
var
dia, mes, ano, horas, minutos, segundos,
DecSegundos, segundos_ant, segundos_final, milisegundos,
milisegundos_ant, milisegundos_final: Word;
DataAtu,DataAnt,Data : TDateTime;

...
// pego os segundos e milesimos de segundos e jogo numa variável.

DecodeDateTime(Now, ano, mes, dia, horas, minutos, segundos,
milisegundos);

// guardo os segundo e milisegundos em variável auxiliar
milisegundos_ant := milisegundos;
segundos_ant := segundos;

...

// segudos depois, pego novamente os segundos e milesimos de segundos
DecodeDateTime(Now, ano, mes, dia, horas, minutos, segundos,
milisegundos);

// faço esta bagunça abaixo, para pegar a diferença
// entre os milisegundos atuais e o anterior
if milisegundos > milisegundos_ant then
milisegundos_final := (milisegundos - milisegundos_ant)
else
milisegundos_final := (milisegundos_ant - milisegundos);

milisegundos_ant := milisegundos;

// mesma coisa faço para pegar a diferença
// entre os segundos atuais e o anterior

if segundos > segundos_ant then
segundos_final := (segundos - segundos_ant)
else
segundos_final := (segundos_ant - segundos);
segundos_ant := segundos;

...

A pergunta é... será que isso tá certo?
Não tem forma melhor de fazer?
Quem puder me dá (opsssssss) uma ajuda, eu agradeço!

um abraço,

William Brum
BH - Minas


 

Responder a