Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Gestion du temps
        Comment initialiser une variable avec une date ou un temps ?
        Comment encoder/décoder une date ou un temps ?
        Comment savoir si une date ou un temps est valide ?
        Comment changer la date/heure du PC ?
        Comment chronométrer avec une précision d'une milliseconde ?
7.1. Opérations sur les dates/heures (5)
                Comment additionner ou soustraire des jours à une date ?
                Comment calculer le nombre de jours entre deux dates ?
                Comment calculer le numéro de jour dans l'année d'une date ?
                Comment calculer le numéro de semaine dans l'année d'une date ?
                Comment calculer le jour de la semaine pour une date ?
7.2. Dates particulières (4)
                Comment calculer la date de Pâques ?
                Comment savoir si une année est bissextile ?
                Comment convertir une date julienne en date grégorienne ?
                Comment convertir une date grégorienne en date julienne ?



Comment initialiser une variable avec une date ou un temps ?
Créé le 27/10/2004[haut]
auteurs : Psl, Ricky81
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.

Ces types disposent d'une propriété Val qui est un double définit comme suit : sa partie entière correspond au nombre de jours écoulés depuis le 30/12/1899, sa partie décimale (nulle dans le cas d'un TDate) correspond au nombre d'heures (ramené à 24) depuis minuit.

Pour bénéficier des fonctions et méthodes spécifiques à ces types, il vous faudra inclure DateUtils.hpp.

TDate date1, date2, date3;
TDateTime date4;

date1 = Yesterday(); // renvoie le jour précédent
date2 = Date(); // renvoie le jour actuel
date3 = Tomorrow(); // renvoie le jour suivant
date4 = Now(); // renvoie la date et heure courante
Pour une gestion du temps, vous pouvez utiliser le type TTime qui représente un temps sous la forme HH, MM, SS et mSec.

TTime time = EncodeTime(15, 10, 54, 0);
// time vaut 15h10'54"

Comment encoder/décoder une date ou un temps ?
Mise à jour le 21/06/2006[haut]
auteurs : Psl, Ricky81
Pour affecter une date à une variable de type TDate ou TDateTime, vous pouvez utiliser la fonction EncodeDate.

TDate date;
date = EncodeDate(annee, mois, jour); // les paramètres sont des entiers
Pour extraire des informations à partir d'une date, il suffit d'utiliser la fonction DecodeDate : le code suivant initialise les variables annee, mois et jour.

WORD annee, mois, jour;
date = Date();
DecodeDate(date, annee, mois, jour);
Des fonctions similaires sont disponibles pour la gestion du temps :

TDateTime __fastcall EncodeTime(Word Hour, Word Min, Word Sec, Word MSec);
void __fastcall DecodeTime(const System::TDateTime DateTime, Word &Hour, Word &Min, Word &Sec, Word &MSec);
Enfin, à noter les fonctions EncodeDateTime et DecodeDateTime pour la gestion simultanée de la date et de l'heure.


Comment savoir si une date ou un temps est valide ?
Créé le 27/10/2004[haut]
auteur : Ricky81
Pour savoir si une date est valide, utilisez la fonction IsValidDate.
Pour le cas d'un temps, utilisez la fonction IsValidTime.

bool bonneDate, bonneHeure;
bonneDate = IsValidDate(annee, mois, jour);
bonneHeure = IsValidTime(heure, minute, seconde, milliseconde);
Il s'agit ici de vérifier qu'à partir des différentes valeurs constituant la date/heure, on construit bien une date/heure valide.


Comment changer la date/heure du PC ?
Créé le 27/10/2004[haut]
auteurs : Nono40, Ricky81
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é :


bool __fastcall miseHeure(TDateTime dateHeure)
{
   TSystemTime *infos = new TSystemTime;
   TTimeZoneInformation *zone = new TTimeZoneInformation;
   int retour;

   // recherche des informations sur les décalages locaux
   retour = GetTimeZoneInformation(zone);
   // passage à l'heure absolue
   switch (retour)
   {
      case TIME_ZONE_ID_UNKNOWN :
         dateHeure = dateHeure + (zone->Bias / (24.*60.));
      case TIME_ZONE_ID_STANDARD :
         dateHeure = dateHeure + ((zone->Bias + zone->StandardBias) / (24.*60.));
      case TIME_ZONE_ID_DAYLIGHT :
         dateHeure = dateHeure + ((zone->Bias + zone->DaylightBias) / (24.*60.));
   }
   // mise à l'heure du Pc (les droits sont nécessaires)
   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);

   return SetSystemTime(infos);
}
Sans oublier un :

#include <DateUtils.hpp>

Comment chronométrer avec une précision d'une milliseconde ?
Créé le 06/12/2006[haut]
auteur : doudouallemand
Vous pouvez utiliser pour cela la méthode GetTickCount, qui vous renvoie un entier, en millisecondes, correspondant au temps écoulé depuis que l'ordinateur est allumé.

void TestGetTickCount()
{
    int start, stop, lap;     //déclaration d'entier pour récupérer les valeurs renvoyees par GetTickCount()
    start = GetTickCount();    //start contient alors la durée écoulé, en millisecondes, depuis que l'ordinateur est allumé
    lap = GetTickCount() - start;      //utilisation de la variable lap pour un temps intermédiaire
    stop = GetTickCount() - start;    //stop contient le temps écoulé depuis l'affectation de start
}


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web