MKTIME |
Fabriquer le temps |
---|---|
Langage C++ | ctime (time.h) |
Syntaxe
time_t *mktime(struct tm *ptrheure) |
Paramètres
Nom | Description |
---|---|
ptrheure | Ce paramètre permet d'indiquer le temps à traiter |
Description
Cette fonction permet de convertir des heures locales en heures normalisé.
Remarques
- La fonction mktime() renvoie l'équivalent en temps d'un calendrier du temps ventilé trouvé dans la structure pointée par le ptrheure. Les champs tm_wday et tm_yday sont définis par la fonction, ils n'ont donc pas besoin d'être définis au moment de l'appel.
- Si la fonction mktime() ne peut pas représenter les informations comme une heure de calendrier valide, une valeur de -1 est renvoyé.
- Définition et utilité : La fonction mktime est définie dans la bibliothèque <ctime> et permet de convertir une structure tm en un time_t, représentant le nombre de secondes écoulées depuis le 1er janvier 1970, également appelé "timestamp". Cette fonction est utile lorsqu'il est nécessaire de manipuler des dates et heures sous forme d'un type standardisé pour effectuer des calculs ou des comparaisons avec d'autres dates.
- Le rôle de la structure tm : La structure tm utilisée avec mktime contient plusieurs champs représentant des informations temporelles telles que l'année, le mois, le jour, l'heure, les minutes, les secondes, etc. Par exemple, tm.tm_year contient l'année (compte depuis 1900), tm.tm_mon le mois (0-11), et tm.tm_mday le jour du mois. Ces champs doivent être remplis correctement pour que la conversion soit effectuée correctement.
- Comportement avec les dates invalides : Si la structure tm fournie à mktime contient des valeurs invalides, telles qu'un mois supérieur à 11 ou une heure supérieure à 23, mktime ajustera la date en conséquence. Par exemple, si le mois est spécifié comme 13, la fonction ajoutera un an et ajustera le mois à janvier de l'année suivante. Cela permet une certaine flexibilité, mais il est important de vérifier si la valeur retournée est valide.
- Modification de la structure tm : Contrairement à d'autres fonctions qui prennent des structures en entrée sans les modifier, mktime modifie également la structure tm passée en paramètre. Par exemple, si la structure tm représente le 32 décembre 2021, mktime renverra une valeur ajustée, mais modifie également le champ tm_mday de manière appropriée. Il est donc important de vérifier la structure après l'appel pour obtenir les valeurs ajustées.
- Gestion de l'heure d'été et des fuseaux horaires : mktime tient compte de l'heure d'été (DST) et des fuseaux horaires lors de la conversion. Si la structure tm contient une heure dans un fuseau horaire particulier, mktime ajustera automatiquement l'heure pour tenir compte de l'heure d'été en vigueur à ce moment-là, si applicable. Cela fait de mktime un outil utile pour la gestion des horaires en prenant en compte les variations liées aux fuseaux horaires et à l'heure d'été.
- Retour d'une valeur négative en cas d'échec : Si la conversion échoue (par exemple, si la structure tm contient une date invalide ou un dépassement de capacité), mktime retourne -1. Cela permet de détecter les erreurs de conversion. Il est donc essentiel de vérifier le résultat de mktime pour s'assurer que la conversion s'est déroulée correctement.
- Utilisation dans les calculs temporels : mktime est souvent utilisée pour effectuer des calculs temporels, comme obtenir le nombre de secondes entre deux dates ou convertir une date et une heure en une forme utilisable pour la comparaison avec d'autres dates. Cela permet de travailler avec des intervalles de temps sous forme d'horodatage (secondes depuis 1970), facilitant ainsi les comparaisons et les calculs liés au temps.
Exemple
Voici un exemple permettant de calculer le nombre de jours entre deux dates à l'aide de cette fonction :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <ctime>
-
- int GetNumberDaysBetween2Dates(char *date1, char *date2) {
- struct tm timestamp1,timestamp2;
- sscanf(date1,"%i-%i-%i",×tamp1.tm_year,×tamp1.tm_mon,×tamp1.tm_mday);
- sscanf(date2,"%i-%i-%i",×tamp2.tm_year,×tamp2.tm_mon,×tamp2.tm_mday);
- timestamp1.tm_sec = timestamp1.tm_min = timestamp1.tm_hour = timestamp1.tm_yday = timestamp1.tm_isdst = 0;
- timestamp1.tm_year -= 1900;
- timestamp1.tm_mon--;
- timestamp2.tm_sec = timestamp2.tm_min = timestamp2.tm_hour = timestamp2.tm_yday = timestamp2.tm_isdst = 0;
- timestamp2.tm_year -= 1900;
- timestamp2.tm_mon--;
- return abs(mktime(×tamp2) - mktime(×tamp1))/86400;
- }
-
- int main() {
- std::cout << "2011-01-01 au 2011-12-31 = " << GetNumberDaysBetween2Dates("2011-1-1","2011-12-31") << " jours" << std::endl;
- std::cout << "2011-12-31 au 2011-01-01 = " << GetNumberDaysBetween2Dates("2011-12-31","2011-1-1") << " jours" << std::endl;
- std::cout << "2011-06-15 au 2011-08-01 = " << GetNumberDaysBetween2Dates("2011-6-15","2011-8-01") << " jours" << std::endl;
- std::cout << "2011-06-15 au 2011-06-19 = " << GetNumberDaysBetween2Dates("2011-6-15","2011-6-19") << " jours" << std::endl;
- std::cout << "2011-06-15 au 2011-06-16 = " << GetNumberDaysBetween2Dates("2011-6-15","2011-6-16") << " jours" << std::endl;
- std::cout << "2011-06-15 au 2011-06-15 = " << GetNumberDaysBetween2Dates("2011-06-15","2011-06-15") << " jours" << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
2011-01-01 au 2011-12-31 =364 jours2011-12-31 au 2011-01-01 =364 jours
2011-06-15 au 2011-08-01 =47 jours
2011-06-15 au 2011-06-19 =4 jours
2011-06-15 au 2011-06-16 =1 jours
2011-06-15 au 2011-06-15 =0 jours
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - localtime
Langage de programmation - C++ - Référence de procédures et fonctions - time
Langage de programmation - C - Référence de procédures et fonctions - mktime
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 179.
Dernière mise à jour : Lundi, le 3 août 2015