Décoder les informations d'un TDateTime



Il existe une structure qui permet de stocker la date, en Delphi, le TDateTime, mais pour en obtenir les informations, les fonctions TimeToStr, DateToStr et FormatDateTime sont parfois insuffisantes. En effet, si on veut obtenir l'intervalle entre deux TDateTime en secondes, cette solution est valable tant que le nombre de secondes est inférieur à 59, mais au dela FormatDateTime renvoie 00. Cependant, il existe une fonction, appelée DecodeTime, qui permet d'obtenir toutes les informations souhaitées

Voici par exemple la fonction qui renvoie le nombre de secondes :

Nombre de secondes

function Seconds(Time: TDateTime): integer;
var
  H, M, S, MS: word;
begin
  DecodeTime(Time, H, M, S, MS);
  result := H * 3600 + M * 60 + S;
end;



Le nombre de millisecondes :

Millisecondes

function MilliSeconds(Time: TDateTime): integer;
var
  H, M, S, MS: word;
begin
  DecodeTime(Time, H, M, S, MS);
  result := H * 3600000 + M * 60000 + S * 1000 + MS;
end;



Le nombre de minutes :

Minutes

function Minutes(Time: TDateTime): integer;
var
  H, M, S, MS: word;
begin
  DecodeTime(Time, H, M, S, MS);
  result := H * 60 + M;
end;



Et enfin le nombre d'heures :

Heures

function Hours(Time: TDateTime): integer;
var
  H, M, S, MS: word;
begin
  DecodeTime(Time, H, M, S, MS);
  result := H;
end;



Il ne vous reste plus qu'à déclarer une variable de type TDateTime, et à lui assigner la valeur "now" à la création de l'application :

Différence de temps, en secondes

interface
...

var
  MyTime: TDateTime;

implementation
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyTime := Now;
end;

// Vous pouvez maintenant gérer dans un TTimer ou 
// un évennement OnIdle l'affichage de la date:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  label1.caption := IntToStr(Seconds(Now - MyTime));
end;



3 requête(s) SQL executée(s) en 0.005 Secs - Temps total de génération de la page : 0.012 Secs