Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Konverterar en UTC-tid som representeras av en struct tm till en UTC-tid som representeras av en time_t typ.
Syntax
time_t _mkgmtime( // See note in remarks section about linkage
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Parameterar
timeptr
En pekare till UTC-tiden som en struct tm att konvertera.
Returvärde
En kvantitet av typen __time32_t eller __time64_t som representerar antalet sekunder som förflutit sedan midnatt, den 1 januari 1970, i Coordinated Universal Time (UTC). Om datumet är utom räckhåll (se avsnittet Kommentarer) eller om indata inte kan tolkas som en giltig tid är returvärdet -1.
Anmärkningar
Funktionerna _mkgmtime32 och _mkgmtime64 konverterar en UTC-tid till en __time32_t eller __time64_t en typ som representerar tiden i UTC. Om du vill konvertera en lokal tid till UTC-tid använder du mktime, _mktime32och _mktime64 i stället.
_mkgmtime är en infogad funktion som utvärderas till _mkgmtime64och time_t motsvarar __time64_t. Om du behöver tvinga kompilatorn att tolka time_t som den gamla 32-bitars time_tkan du definiera _USE_32BIT_TIME_T. Vi rekommenderar det inte eftersom programmet kan misslyckas efter den 18 januari 2038, det maximala intervallet på 32 bitar time_t. Det är inte tillåtet alls på 64-bitarsplattformar.
Tidsstrukturen som skickas in ändras på följande sätt, på samma sätt som den _mktime ändras av funktionerna: fälten tm_wday och tm_yday anges till nya värden baserat på värdena tm_mday för och tm_year. Eftersom tiden antas vara UTC ignoreras fältet tm_isdst .
Funktionens _mkgmtime32 intervall är från midnatt, 1 januari 1970, UTC till 23:59:59 18 januari 2038, UTC. Intervallet _mkgmtime64 är från midnatt, 1 januari 1970, UTC till 23:59:59, 31 december 3000, UTC. Ett inaktuellt datum resulterar i ett returvärde på -1. Intervallet _mkgmtime beror på om _USE_32BIT_TIME_T har definierats. När det inte har definierats, vilket är standardvärdet, är intervallet samma som _mkgmtime64. Annars är intervallet begränsat till 32-bitarsintervallet _mkgmtime32för .
Både gmtime och localtime använder en gemensam statisk buffert för konverteringen. Om du anger bufferten till _mkgmtimeförstörs det tidigare innehållet.
Anmärkning
När du använder Windows SDK version 10.0.26100.6901 och Visual Studio 2026 eller senare tillsammans, _mkgmtime är inte längre static inline (intern länkning). I stället är inline det (extern länkning).
För att återgå till det tidigare beteendet, #define _STATIC_INLINE_UCRT_FUNCTIONS=1 innan du inkluderar några CRT-huvuden. Som standard _STATIC_INLINE_UCRT_FUNCTIONS är värdet 0.
Den här ändringen ökar UCRT-överensstämmelsen med C++-standarden och förbättrar kompatibiliteten med C++-moduler.
Examples
// 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
I följande exempel visas hur den ofullständiga strukturen fylls i av _mkgmtime. Den beräknar värden för både veckodag och år.
// 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
Se även
Tidshantering
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