FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 919, dernière mise à jour : 14 juin 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireGestion du temps (19)
précédent sommaire suivant
 

Les deux principaux types de date sont TDate et TDateTime :

  • TDate représente une date sous la forme AAAA, MM et JJ ;
  • TDateTime représente la date et l'heure sous la forme AAAA, MM, JJ, HH, MM, SS, mSS.

La déclaration se fait sous la forme : VarDate1 = TDate ou VarDate2 = TDateTime.

Le type spécial TDate ou TDateTime représente pour sa partie entière le nombre de jours écoulés depuis le 30/12/1899 et pour sa partie fractionnaire le nombre d'heure depuis minuit (partie fractionnaire nulle pour TDate).
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uses 
  DateUtils; {pour les fonctions Tomorrow, Yesterday et IsToday} 
var 
  MaDate01, MaDate02, MaDate03: TDate; 
  MaDate11: TDateTime; 
begin 
  MaDate01 := Date;      {la fonction Date renvoie la date en cours} 
  MaDate02 := Tomorrow;  {la fonction Tomorrow renvoie le jour suivant de Date} 
  MaDate03 := Yesterday; {la fonction Yesterday renvoie le jour précédent de Date} 
  MaDate11 := now;       {la fonction now renvoie la date et l'heure système} 
  if IsToday(MaDate11) then 
  {IsToday renvoie un boolean qui permet de contrôler si MaDate11 est la date en cours} 
    ShowMessage('OK'); 
end;

Les deux principaux types de time sont TTime et TDateTime.
TTime représente un temps sous la forme HH, MM, SS et mSec.
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
var 
  Temps1 : TTime; 
  Temps2, TempsP : TDateTime; 
begin 
  Temps1 := EncodeTime(12,30,25,0); 
  {initialise Temps1 avec 12h 30mn 25 sec} 
  ShowMessage(TimeToStr(Temps1)); 
  TempsP := Time; {la fonction Time renvoie l'heure actuelle} 
  ShowMessage(TimeToStr(TempsP)); 
  Temps2 := Now;  {même effet que Time} 
  ShowMessage(TimeToStr(Temps2)); 
end;

Mis à jour le 18 octobre 2013 psl

Pour affecter une date à une variable de type TDate ou TDateTime, il suffit d'utiliser la fonction EncodeDate (Year, Month, Day : Word) : TDateTime.
Pour récupérer les éléments d'une variable TDate, on utilise la procédure DecodeDate (Date : TDateTime; var Year, Month, Day : Word).

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
var 
  MaDate: TDate; 
  Jour, Mois, Annes: Word; 
begin 
  {Jour, Mois et Annee doit être une date valide} 
  {Pour encoder : } 
  MaDate := EncodeDate(Annee,Mois,Jour); 
  {Pour décoder : } 
  DecodeDate(MaDate, Annee, Mois, Jour); 
end;

Pour affecter un temps à une variable de type TTime ou TDateTime, il suffit d'utiliser la fonction EncodeTime.
Pour récupérer les éléments d'une variable TTime, on utilise la fonction DecodeTime.
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
var 
  MonHeure : TTime; 
  Heure, Minute, Seconde, milliSec : Word; 
begin 
  {Heure, Minute, Seconde et milliSec doivent être un temps valide} 
  {Pour encoder} 
  MonHeure := EncodeTime(Heure, Minute, Seconde, milliSec); 
  ShowMessage(TimeToStr(MonHeure)); 
  {Pour décoder} 
  DecodeTime(MonHeure,Heure, Minute, Seconde, milliSec); 
end;

Mis à jour le 18 octobre 2013 psl

Pour savoir si une date est valide, il suffit d'utiliser la fonction IsValidDate().
Il en va de même pour le temps en utilisant la fonction IsValideTime().

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
uses 
  DateUtils; 
var 
  DateOK                           : Boolean; 
  Annee, Mois, Jour                : Word; 
  TimeOK                           : Boolean; 
  Heure, Minute, Seconde, milliSec : Word; 
begin 
  DateOK := IsValidDate(Annee, Mois, Jour); 
  TimeOK := IsValidTime(Heure, Minute, Seconde, milliSec); 
end;

Mis à jour le 18 octobre 2013 psl

Pour modifier l'heure et la date du PC il faut utiliser la fonction API SetSystemTime. Or cette fonction demande une heure absolue. La fonction suivante permet de mettre à l'heure le PC en fonction des décalages horaires et de l'heure d'été :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{ Fonction de mise à l'heure } 
Function MiseHeure(DateHeure:TDateTime):Boolean; 
Var Infos  :TSystemTime; 
    Zone   :TTimeZoneInformation; 
    Retour :Integer; 
Begin 
  { Recherche des information sur les décalages locaux } 
  Result:=False; 
  Retour:=GetTimeZoneInformation(Zone); 
  { DateHeure étant en heure locale => ajout des décalages pour obtenir l'heure absolue } 
  Case Retour Of 
    TIME_ZONE_ID_UNKNOWN  : DateHeure:=DateHeure+( Zone.Bias                   /(24*60)); 
    TIME_ZONE_ID_STANDARD : DateHeure:=DateHeure+((Zone.Bias+Zone.StandardBias)/(24*60)); 
    TIME_ZONE_ID_DAYLIGHT : DateHeure:=DateHeure+((Zone.Bias+Zone.DaylightBias)/(24*60)); 
  Else 
    Exit; 
  End; 
  { Ensuite, mise à l'heure du Pc } 
  { Attention sous Windows NT/2000/XP l'utilisateur doit avoir les droits } 
  { suffisants pour que ça fonctionne ! } 
  Infos.wYear         :=YearOf        (DateHeure); 
  Infos.wMonth        :=MonthOf       (DateHeure); 
  Infos.wDayOfWeek    :=DayOfWeek     (DateHeure); 
  Infos.wDay          :=DayOf         (DateHeure); 
  Infos.wHour         :=HourOf        (DateHeure); 
  Infos.wMinute       :=MinuteOf      (DateHeure); 
  Infos.wSecond       :=SecondOf      (DateHeure); 
  Infos.wMilliseconds :=MillisecondOf (DateHeure); 
  Result:=SetSystemTime(Infos); 
End;
Pour que ce code fonctionne, il faut ajouter DateUtils dans la clause Uses.

Mis à jour le 18 octobre 2013 Nono40

Pour formater un type TDateTime en chaîne de caractères il faut utiliser la fonction FormatDateTime.

Code Delphi : Sélectionner tout
1
2
3
4
5
var 
  DateChaine: string; 
begin 
  DateChaine := FormatDateTime('"Nous sommes le" dd/mm/yyyy", il est "hh:ss', Now); 
end;
Les spécificateurs de format sont détaillés dans l'aide de delphi de cette fonction. Les plus utilisés sont les suivants :
  • yyyy : année sur quatre chiffres : 2005
  • yy : année sur deux chiffres : 05
  • mmmm : mois en clair : Janvier
  • mmm : mois en abrégé : Jan
  • mm : mois sur deux chiffres : 01
  • m : mois sur un ou deux chiffres : 1
  • dddd : jour en clair : Dimanche
  • ddd : jour en abrégé : Dim
  • dd : jour sur deux chiffres : 09
  • d : jour sur un ou deux chiffres : 9
  • hh : heure sur deux chiffres : 01
  • h : heure sur un ou deux chiffres : 1
  • nn : minute sur deux chiffres : 01
  • n : minute sur un ou deux chiffres : 1
  • ss : seconde sur deux chiffres : 01
  • s : seconde sur un ou deux chiffres : 1
  • z : millisecondes sans les préfixer d'un zéro (0 à 999)
  • zzz : millisecondes en les préfixant d'un zéro (000 à 999)

Mis à jour le 21 janvier 2014 rbag

Il arrive souvent dans un programme que l'on récupère une durée dans un entier sous forme de nombre de secondes (ou de minutes, heures…). Pour transformer en affichage classique HH:MM:SS il est possible d'effectuer des divisions et modulo mais il existe une méthode bien plus simple. Le format TDateTime de Delphi est un nombre flottant dont la partie entière est le nombre de jour, et la partie fractionnaire l'heure dans le jour sous forme d'une fraction de jour.
Ansi :

  • 1/24 représente un heure
  • 1/(24*60) représente un minute
  • 1/(24*3600) représente un seconde

Sur ce principe on peut formater facilement un nombre de secondes :
Code Delphi : Sélectionner tout
TimeToStr(MonEntier/24/3600);

Mis à jour le 21 janvier 2014 Nono40

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -

Partenaire : Hébergement Web