IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 124, nombre de questions : 933, dernière mise à jour : 28 septembre 2024  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.

SommaireGestion du tempsOpérations sur les dates/heures (7)
précédent sommaire suivant
 

Pour ajouter ou soustraire un nombre de jours à une date, on peut utiliser plusieurs méthodes.

En utilisant directement la date :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
var 
  Date1  : TdateTime; 
  NbJour : Integer; 
begin 
  Date1 := EncodeDate(2002, 11, 1); 
  Date1 := Date1 + NbJour; 
  {ou bien Date1 := Date1 - NbJour;} 
end;
La variable NbJour peut être positive ou négative.

En utilisant des fonctions :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
uses 
  DateUtils; 
var 
  Date1  : TdateTime; 
  NbJour : Integer; 
begin 
  Date1 := EncodeDate(2002, 11, 1); 
  Date1 := IncDay(Date1, NbJour);
La variable NbJour peut être positive ou négative.

On peut également utiliser les fonctions IncMonth(), IncYear() et IncWeek() :
Code delphi : Sélectionner tout
1
2
3
  Date1 := IncMonth(Date1, NbMois); 
  Date1 := IncYear(Date1, NbAnnee); 
  Date1 := IncWeek(Date1, NbSemaine);
NbMois, NbAnnee et NbSemaine peuvent être positifs ou négatifs.

En utilisant le jour Julien :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
uses 
  DateUtils; 
var 
  Date1   : TdateTime; 
  Annee, Mois, Jour, Heure, Minute, Seconde, milliSec : Word; 
  NbJour  : Integer; 
  JourJul : Double; 
begin 
  Date1 := EncodeDateTime(Annee, Mois, Jour, Heure, Minute, Seconde, milliSec); 
  JourJul := DateTimeToJulianDate(Date1) + NbJour; 
  Date1 := JulianDateToDateTime(Date1); 
end;
NbJour peut être un entier ou un réel positif ou négatif. La variable JourJul intègre l'heure et est entière pour midi.

Mis à jour le 18 octobre 2013 psl

Pour calculer la différence entre deux dates, on peut utiliser plusieurs méthodes :

En passant directement par les dates :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
var 
  Date1, Date2 : TDateTime;  
  Diff : Extended;  
  Jour1, Mois1, Annee1 : Word;  
  Jour2, Mois2, Annee2 : Word;  
begin  
  Date1 := EncodeDate(Annee1, Mois1, Jour1);  
  Date2 := EncodeDate(Annee2, Mois2, Jour2);  
  Diff := Date2 - Date1;  
end;

En passant directement par une fonction :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
var 
  Date1, Date2 : TDateTime;  
  Diff : Extended;  
  Jour1, Mois1, Annee1 : Word;  
  Jour2, Mois2, Annee2 : Word;  
begin  
  Date1 := EncodeDate(Annee1, Mois1, Jour1);  
  Date2 := EncodeDate(Annee2, Mois2, Jour2);  
  Diff := DaysBetween(Date2, Date1);   
end;

En passant par les jours Juliens :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
var 
Date1, Date2 : TDateTime;  
  Diff : Extended;  
  Jour1, Mois1, Annee1 : Word;  
  Jour2, Mois2, Annee2 : Word;  
begin  
  Date1 := EncodeDate(Annee1, Mois1, Jour1);  
  Date2 := EncodeDate(Annee2, Mois2, Jour2);  
  Diff := DateTimeToJulianDate(Date2)-DateTimeToJulianDate(Date1);  
end;

Mis à jour le 18 octobre 2013 psl

Le rang du jour de l'année est obtenu par la fonction DayOfTheYear() :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
uses 
  DateUtils; 
var 
  Date1 : TDateTime; 
  NumeroJ : Integer; 
begin 
  Date1 := Now; {Date système} 
  NumeroJ := DayOfTheYear(Date1); 
end;

Mis à jour le 18 octobre 2013 psl

Le numéro de la semaine dans l'année est obtenu par la fonction WeekOfTheYear() :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
uses 
  DateUtils; 
var 
  Date1 : TDateTime; 
  NumSem : Word; 
begin 
  Date1 := EncodeDate(2002, 11, 1); 
  NumSem := WeekOfTheYear(Date1); 
end;

Mis à jour le 18 octobre 2013 psl

Le jour de la semaine est obtenu par la fonction DayOfTheWeek() :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
uses 
  DateUtils; 
var 
  JourSem : Word; 
  Date1  : TDateTime; 
begin 
  Date1 := EncodeDate(2002, 11, 1); 
  JourSem := DayOfTheWeek(Date1); 
end;

Mis à jour le 18 octobre 2013 psl

Les fonctions de chronométrage précises renvoient, en général, une durée fractionnaire exprimée en secondes. Cependant, l'affichage de la durée dans cette unité est souvent inadapté, et demande à être exprimé dans une unité plus appropriée.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  
{ 
  Convertit une durée exprimée en secondes vers la meilleure unité possible. 
  SecCount : Nombre de secondes écoulées. 
  Retour : Chaîne formatée (2 décimales), avec unité de temps. 
} 
Function BestTimeDisplay ( SecCount : Extended ) : String ; 
Var 
  TimeUnit : String ; 
Begin 
  TimeUnit := 's' ; 
  // Temps < 1 s. 
  If (SecCount < 1) Then Begin 
    // Temps en ms. 
    SecCount := SecCount * 1000; 
    TimeUnit := 'ms'; 
    // Temps en µs. 
    If (SecCount < 1) Then 
    Begin 
      SecCount := SecCount * 1000; 
      TimeUnit := 'µs'; 
    End; 
    // Temps en ns. 
    If (SecCount < 1) Then 
    Begin 
      SecCount := SecCount * 1000; 
      TimeUnit := 'ns'; 
    End; 
  End 
  Else Begin 
    // Temps > 1 mn. 
    If (SecCount > 60) Then 
    Begin 
      SecCount := SecCount / 60; 
      TimeUnit := 'mn'; 
    End; 
    // Temps > 1 h. 
    If (SecCount > 60) Then 
    Begin 
      SecCount := SecCount / 60; 
      TimeUnit := 'h'; 
      // Temps > 1 j. 
      If (SecCount > 24) Then 
      Begin 
        SecCount := SecCount / 24; 
        TimeUnit := 'j'; 
      End; 
    End; 
  End; 
  // On a une unité de temps et une valeur : on peut préparer l'affichage. 
  Result := Format('%.2f %s', [SecCount, TimeUnit]); 
End;
Par rapport au code d'exemple des chronométrages, la valeur calculée FElapsed est directement utilisable par la fonction BestTimeDisplay.

Mis à jour le 21 janvier 2014 Mac LAK

Cette fonction renvoie, à la manière de la partie entière d'un TDate, le nombre de trimestres depuis le 1er janvier de l'an un (1/1/1), y compris le trimestre en cours…

Code Delphi : Sélectionner tout
1
2
3
4
5
  
function QuelTrimestre(Jour: TDate): integer; 
begin 
  Result:=(yearof(jour)-1)*4 +(monthof(jour)-1)div 3+1; 
end;
Le 1/1/1 appartient au trimestre numéro 1. Le 6/11/2006 appartient au trimestre numéro 8024. A partir de là, il est facile de calculer :

- Le nombre de trimestres écoulés entre deux dates :
Code Delphi : Sélectionner tout
1
2
3
4
5
6
7
  
var DateDebut,DateFin:TDate; 
    NombreDeTrimestres:integer; 
begin 
  ... 
  NombreDeTrimestres := QuelTrimestre(DateFin) - QuelTrimestre(DateDebut); 
end;
- Ou le numéro de trimestre calendaire d'une date :
Code Delphi : Sélectionner tout
1
2
3
4
5
  
function Trimestre(jour:TDate):integer; 
begin 
  Result := ((QuelTrimestre(Now)-1) mod 4)+1; 
end;
Exemple : Le 6/11/2006 appartient au 4ème trimestre de l'année 2006

Mis à jour le 21 janvier 2014 OutOfRange

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 © 2024 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.