GMTIME |
Demande le temps |
---|---|
Langage C++ | ctime (time.h) |
Syntaxe
struct tm *gmtime(const time_t *sec) |
Paramètres
Nom | Description |
---|---|
sec | Ce paramètre permet d'indiquer les secondes |
Description
Cette fonction permet de convertir des secondes en date et heure.
Remarques
- La fonction gmtime() renvoie un pointeur vers le format de temps décomposée sous le format d'une structure tm. L'heure est représentée en temps universel coordonné (UTC), étant essentiellement l'heure du fuseau horaire de Greenwich. La valeur de temps est généralement obtenue par un appel à la fonction time(). Si le système ne prend pas en charge UTC, une valeur NULL est renvoyé. La structure utilisée par gmtime() pour maintenir le temps ventilé est allouée statiquement et est écrasée à chaque appel de la fonction. Si vous souhaitez enregistrer le contenu de la structure, vous devez le copier ailleurs.
- Définition et fonctionnement : gmtime est une fonction déclarée dans l'entête <ctime> et prend en paramètre un pointeur vers un time_t, représentant le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC (époque UNIX). Elle renvoie un pointeur vers une structure tm, contenant des informations détaillées sur la date et l'heure en UTC.
- Différence avec localtime : Contrairement à localtime, renvoyant une heure ajustée selon le fuseau horaire du système, gmtime renvoie toujours l'heure en UTC. Cela est utile pour manipuler des dates de manière indépendante des fuseaux horaires et éviter les erreurs dues aux changements d'heure (comme l'heure d'été et d'hiver).
- Problème de non-réentrance : gmtime retourne un pointeur vers une structure tm statique interne. Cela signifie que chaque appel à gmtime écrase les données précédemment obtenues. Si plusieurs processus léger utilisent gmtime simultanément, cela peut entraîner des résultats imprévisibles. Pour éviter cela, on peut utiliser gmtime_r (dans les systèmes POSIX) ou gmtime_s (dans Microsoft C Runtime), étant des versions réentrantes.
- Dépendance aux implémentations et plateformes : Bien que gmtime soit une fonction standard du C/C++, son comportement peut varier légèrement selon les implémentations et les plateformes. Par exemple, certains systèmes peuvent ne pas gérer correctement les valeurs extrêmes de time_t, comme celles dépassant la capacité d'un entier signé 32 bits.
- Gestion des erreurs et risque de nullptr : gmtime peut retourner un pointeur nullptr si l'entrée est invalide. Par exemple, si la valeur passée est négative sur certains systèmes (avant l'époque UNIX), ou trop grande pour être représentée, la fonction peut échouer. Il est donc conseillé de vérifier si le pointeur retourné est nul avant d'utiliser la structure.
- Utilisation avec std::chrono (Alternatives Modernes) : En C++ moderne, il est recommandé d'utiliser les fonctionnalités de std::chrono pour manipuler le temps, plutôt que de dépendre de gmtime. Par exemple, std::chrono::system_clock::to_time_t peut être utilisé avec std::gmtime (C++20) pour obtenir une version sécurisée et réentrante de gmtime.
- Conversion inverse avec mktime : Pour convertir une structure tm en time_t, on peut utiliser mktime. Cela permet, par exemple, de calculer des décalages horaires ou de modifier une date avant de la convertir en secondes depuis l'époque UNIX. Voici un exemple :
- tm utc_tm = {};
- utc_tm.tm_year = 2024 - 1900;
- utc_tm.tm_mon = 1; // Février
- utc_tm.tm_mday = 4;
- time_t timestamp = mktime(&utc_tm);
Cela permet de récupérer un horodatage (timestamp) à partir d'une structure de date.
Exemple
Cet exemple permet d'afficher l'heure actuelle en UTC sous forme de date et d'heure détaillées :
- #include <iostream>
- #include <ctime>
-
- int main() {
- time_t now = time(nullptr);
- tm *utc_time = gmtime(&now);
-
- std::cout << "UTC time: "
- << utc_time->tm_year + 1900 << "-"
- << utc_time->tm_mon + 1 << "-"
- << utc_time->tm_mday << " "
- << utc_time->tm_hour << ":"
- << utc_time->tm_min << ":"
- << utc_time->tm_sec << std::endl;
-
- return 0;
- }
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - asctime
Langage de programmation - C++ - Référence de procédures et fonctions - ctime
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 - gmtime
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 732.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 135.