_mkgmtime
, , _mkgmtime32
_mkgmtime64
Convertit une heure UTC représentée par un struct tm
en heure UTC représentée par un type time_t
.
Syntaxe
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Paramètres
timeptr
Pointeur désignant l’heure UTC sous forme struct tm
à convertir.
Valeur retournée
Quantité de type __time32_t
ou __time64_t
qui représente le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit, en temps universel coordonné (UTC). Si la date est hors plage (voir la section Remarques) ou si l’entrée ne peut pas être interprétée comme une heure valide, la valeur de retour est -1.
Notes
Les fonctions _mkgmtime32
et _mkgmtime64
convertissent une heure UTC en un type __time32_t
ou __time64_t
qui représente l’heure en UTC. Pour convertir une heure locale en heure UTC, utilisez mktime
, _mktime32
et _mktime64
à la place.
_mkgmtime
est une fonction inline qui prend la valeur _mkgmtime64
, tandis que time_t
équivaut à __time64_t
. Si vous devez forcer le compilateur à interpréter time_t
comme ancien time_t
32 bits, vous pouvez définir _USE_32BIT_TIME_T
. Nous ne le recommandons pas, car votre application peut échouer après le 18 janvier 2038, la plage maximale d’un 32 bits time_t
. Il n’est pas autorisé du tout sur les plateformes 64 bits.
La structure de temps passée est modifiée comme suit, de la même façon qu’elle est modifiée par les _mktime
fonctions : les tm_wday
champs et tm_yday
les champs sont définis sur de nouvelles valeurs en fonction des valeurs de tm_mday
et tm_year
. Étant donné que l’heure est supposée être UTC, le tm_isdst
champ est ignoré.
La plage de la fonction _mkgmtime32
va du 1er janvier 1970 à minuit, heure UTC, au 18 janvier 2038 à 23:59:59, heure UTC. La plage de _mkgmtime64
va du 1er janvier 1970 à minuit, heure UTC, au 31 décembre 3000 à 23:59:59, heure UTC. Une date hors plage entraîne une valeur de retour de -1. La plage de _mkgmtime
varie selon que _USE_32BIT_TIME_T
est défini ou non. Lorsqu’elle n’est pas définie, qui est la valeur par défaut, la plage est la même que _mkgmtime64
. Sinon, la plage est limitée à la plage 32 bits de _mkgmtime32
.
Utilisez à localtime
la fois gmtime
une mémoire tampon statique commune pour la conversion. Si vous fournissez cette mémoire tampon à _mkgmtime
, le contenu précédent est détruit.
Exemples
// 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 );
}
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 remplie par _mkgmtime
. Il calcule les valeurs du jour de la semaine et 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 );
}
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
Gestion des horaires
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