Date et heure en Pascal

Le type TDate

Une donnée de type TDate est un nombre flottant qui représente une date.

La partie entière du nombre représente le nombre de jours écoulés depuis le 30 décembre 1899.

(* date1.pas *)
uses
{$IFDEF unix}
  clocale,
{$ENDIF}
  SysUtils;

var
  d: TDate;
  
begin
  d := Date;
  WriteLn(DateToStr(d)); // 27/03/2026
  d := 0;
  WriteLn(DateToStr(d)); // 30/12/1899
end.

La fonction Date renvoie la date du jour.

La fonction DateToStr convertit une date en chaîne de caractères de la forme JJ/MM/AAAA.

Sous Linux, il faut inclure l’unité clocale.

Le type TTime

Une donnée de type TTime est un nombre flottant qui représente une heure.

La partie fractionnelle du nombre représente une fraction de jour.

(* time1.pas *)
uses
  SysUtils;

begin
  WriteLn(TimeToStr(0));
  WriteLn(TimeToStr(1 / 24));
  WriteLn(TimeToStr(Time));
  {
  00:00:00
  01:00:00
  11:37:54
  }
end.

La fonction Time renvoie l’heure courante.

Le type TDateTime

Une donnée de type TDateTime est un nombre flottant utilisé pour représenter une date et une heure.

(* datetime1.pas *)
uses
{$IFDEF unix}
  clocale,
{$ENDIF}
  SysUtils;

begin
  WriteLn(DateTimeToStr(1 + 1 / 24)); // 31/12/1899 01:00:00
  WriteLn(DateTimeToStr(Now));
end.

La fonction Now renvoie la date et l’heure courante.

Utiliser le type TDateTime pour chronométrer une opération

Nous allons utiliser la fonction Now pour chronométrer une opération. La valeur renvoyée par la fonction sera convertie en un nombre entier de millisecondes.

uses
  SysUtils;

function Clock(): integer;
begin
  result := Trunc(1000 * SecsPerDay * Now);
end;

Ensuite il suffira d’appeler deux fois la fonction Clock et de faire la différence.

var
  LClock: integer;

begin
  LClock := Clock();
  // ...
  LClock := Clock() - LClock;
  WriteLn(LClock, ' ms');
end.

La fonction FormatDateTime

La fonction FormatDateTime permet de convertir une date et une heure en chaînes de caractères, en choisissant le format.

Voici par exemple un programme qui affiche la date en toutes lettres, dans la langue de l’utilisateur.

(* formatdatetime1.pas *)
uses
{$IFDEF unix}
  clocale,
{$ENDIF}
  SysUtils;

var
  dt: TDateTime;

begin
  dt := Now;
  WriteLn(DateToStr(dt));
  WriteLn(FormatDateTime('dddd dd mmmm yyyy', dt));
  {
  27/03/2026
  vendredi 27 mars 2026
  }
end.

Jour de la semaine

La fonction DayOfWeek permet également de savoir quel est le jour de la semaine correspondant à une date donnée.

La fonction renvoie un nombre entier compris entre 1 et 7.

(* dayofweek2.pas *)
uses
{$IFDEF unix}
  clocale,
{$ENDIF}
  SysUtils;

var
  LDay: word;
  
begin
  LDay := DayOfWeek(Date);
  WriteLn(DefaultFormatSettings.LongDayNames[LDay]);
end.

L’unité DateUtils

L’unité DateUtils contient des fonctions supplémentaires pour la manipulation des dates.

Par exemple la fonction DaysBetween permet de savoir combien de jours séparent deux dates.

uses
  SysUtils, DateUtils;

begin
  WriteLn(DaysBetween(EncodeDate(1900, 1, 31), Date));
end.

Conversion d’une chaîne de caractères en valeur de type TDate

La fonction TryStrToDate permet de convertir une chaîne de caractères en valeur de type TDate.

Voici un programme qui permet à l’utilisateur de saisir sa date de naissance et de savoir combien de jours il a vécu. En prime nous lui apprenons quel jour de la semaine il est né.

(* daysbetween2.pas *)
uses
{$IFDEF unix}
  clocale,
{$ENDIF}
  SysUtils, DateUtils;

var
  LDate: TDate;
  LUserInput: string;
  
begin
  repeat
    Write('Veuillez entrer votre date de naissance sous la forme JJ/MM/AAAA : ');
    ReadLn(LUserInput);
  until TryStrToDate(LUserInput, LDate);
  
  WriteLn('Vous avez vécu ', DaysBetween(LDate, Date), ' jours.');
  with DefaultFormatSettings do
    WriteLn('Vous êtes né un ', LongDayNames[DayOfWeek(LDate)], '.');
end.


Page d’accueil