Partager via


_mkgmtime, _mkgmtime32, _mkgmtime64

Convertit une heure UTC représentée par tm struct à une heure UTC représentée par un type d'time_t.

time_t _mkgmtime( 
   struct tm* timeptr 
); 
__time32_t _mkgmtime32( 
   struct tm* timeptr 
); 
__time64_t _mkgmtime64( 
   struct tm* timeptr 
);

Paramètres

  • timeptr
    Un Pointeur vers l'heure UTC comme struct tm pour convertir.

Valeur de retour

Une valeur de type __time32_t ou __time64_t représentant le nombre de secondes écoulées depuis minuit, le 1er janvier 1970, en temps universel coordonné (UTC). Si la date est hors limite (consultez la section Notes) ou si l'entrée ne peut pas être interprétée comme un temps valide, la valeur de retour a la valeur – 1.

Notes

Les fonctions d'_mkgmtime32 et _mkgmtime64 convertissent une heure UTC à un type __time32_t ou __time64_t représentant l'heure au format UTC. Pour convertir une heure locales à l'heure UTC, utilisez mktime, à l'_mktime32, et _mktime64 à la place.

_mkgmtime est une fonction inline qui prend _mkgmtime64, et time_t équivaut à __time64_t. Si vous devez forcer le compilateur à interpréter time_tcomme l'ancienne version 32 bits time_t, vous pouvez définir _USE_32BIT_TIME_T. Cela n'est pas recommandée car votre application peut échouer après le 19 janvier 2038 (la plage maximale time_td'un système 32 bits), et il n'est pas autorisé du tout sur les plateformes 64 bits.

La structure horaire est transmise sera modifiée comme suit, de la même façon qu'elles sont modifiées avec des fonctions d'_mktime : les champs d'tm_wday et d'tm_yday sont définis avec de nouvelles valeurs en fonction de les valeurs d'tm_mday et d'tm_year. En spécifiant un temps de structure tm, affectez la valeur au champ de tm_isdstà :

  • Zéro (0) pour indiquer que l'heure d'hiver est appliquée.

  • Une valeur supérieure à 0 pour indiquer que l'heure d'été est appliquée.

  • Une valeur inférieure de zéro pour avoir le calcul de code de bibliothèque Runtime C pour savoir si l'heure d'hiver ou l'heure d'été est appliquée.

La bibliothèque Runtime C utilise la variable d'environnement TZ pour déterminer l'heure d'été correctement. Si TZ n'est pas définie, le système d'exploitation est interrogé pour obtenir le comportement régional correct heure d'été. Une valeur obligatoire tm_isdst est manquante. Si elle n'est pas définie, sa valeur est indéfinie et la valeur de retour mktimede ces fonctions est imprévisible.

La plage de la fonction d'_mkgmtime32 est comprise entre minuit, le 1er janvier 1970, UTC et le 19 janvier, 3h14 : 07, 2038,en valeurs UTC. La chaîne _mkgmtime64 est comprise entre minuit, le 1er janvier 1970, en valeurs UTC et 23h59 : 59, le 31 décembre, 3000, en valeurs UTC. Résultats hors limites de date dans la valeur de retour – 1. La chaîne _mkgmtime varie selon que _USE_32BIT_TIME_T est défini ou pas. Si la valeur est (valeur par défaut) la plage est celui de**_mkgmtime64**; sinon, la plage est limitée à la chaîne 32 bits de**_mkgmtime32**.

Notez quegmtime et localtime utilisent une seule mémoire tampon statiquement allouée pour la conversion. Si vous fournissez cette mémoire tampon à mkgmtime, les contenus précédents sont détruit.

Exemple

// crt_mkgmtime.c
#include <stdio.h>
#include <time.h>

int main()
{
    struct tm t1, t2;
    time_t now, mytime, gmtime;
    char buff[30];

    time( & now );

    _localtime64_s( &t1, &now );
    _gmtime64_s( &t2, &now );

    mytime = mktime(&t1);
    gmtime = _mkgmtime(&t2);

    printf("Seconds since midnight, January 1, 1970\n");
    printf("My time: %I64d\nGM time (UTC): %I64d\n\n", mytime, gmtime);

    /* Use asctime_s to display these times. */

    _localtime64_s( &t1, &mytime );
    asctime_s( buff, sizeof(buff), &t1 );
    printf( "Local Time: %s\n", buff );

    _gmtime64_s( &t2, &gmtime );
    asctime_s( buff, sizeof(buff), &t2 );
    printf( "Greenwich Mean Time: %s\n", buff );

}

Résultat de l'exemple

Seconds since midnight, January 1, 1970
My time: 1171588492
GM time (UTC): 1171588492

Local Time: Thu Feb 15 17:14:52 2007

Greenwich Mean Time: Fri Feb 16 01:14:52 2007

L'exemple suivant montre comment la structure incomplète est terminée avec les valeurs calculées pour le jour de la semaine et le jour de l'année.

// crt_mkgmtime2.c
#include <stdio.h>
#include <time.h>
#include <memory.h>

int main()
{
    struct tm t1, t2;
    time_t gmtime;
    char buff[30];

    memset(&t1, 0, sizeof(struct tm));
    memset(&t2, 0, sizeof(struct tm));

    t1.tm_mon = 1;
    t1.tm_isdst = 0;
    t1.tm_year = 103;
    t1.tm_mday = 12;

    // The day of the week and year will be incorrect in the output here.
    asctime_s( buff, sizeof(buff), &t1);
    printf("Before calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
            buff, t1.tm_yday );

    gmtime = _mkgmtime(&t1);

    // The correct day of the week and year were determined.
    asctime_s( buff, sizeof(buff), &t1);
    printf("After calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
            buff, t1.tm_yday );

}

Sortie

Before calling _mkgmtime, t1 = Sun Feb 12 00:00:00 2003
 t.tm_yday = 0
After calling _mkgmtime, t1 = Wed Feb 12 00:00:00 2003
 t.tm_yday = 42

Voir aussi

Référence

Gestion du temps

asctime, _wasctime

asctime_s, _wasctime_s

gmtime, _gmtime32, _gmtime64

gmtime_s, _gmtime32_s, _gmtime64_s

localtime_s, _localtime32_s, _localtime64_s

mktime, _mktime32, _mktime64

time, _time32, _time64