Dela via


_mkgmtime, _mkgmtime32_mkgmtime64

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