Udostępnij przez


_mkgmtime, _mkgmtime32, _mkgmtime64

Konwertuje czas UTC reprezentowany przez struct tm czas UTC na czas UTC reprezentowany przez time_t typ.

Składnia

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

Parametry

timeptr
Wskaźnik do godziny UTC w struct tm celu przekonwertowania.

Wartość zwracana

Ilość typu __time32_t lub __time64_t reprezentująca liczbę sekund, które upłynęły od północy, 1 stycznia 1970 r., w uniwersalnym czasie koordynowanym (UTC). Jeśli data jest poza zakresem (zobacz sekcję Uwagi) lub dane wejściowe nie mogą być interpretowane jako prawidłowy czas, zwracana wartość to -1.

Uwagi

Funkcje _mkgmtime32 i _mkgmtime64 konwertują czas UTC na __time32_t typ lub __time64_t reprezentujący czas w formacie UTC. Aby przekonwertować czas lokalny na czas UTC, użyj wartości mktime, _mktime32i _mktime64 zamiast tego.

_mkgmtime jest funkcją śródliniową, która oblicza wartość _mkgmtime64, i time_t jest równoważna funkcji __time64_t. Jeśli musisz wymusić, aby kompilator interpretował time_t jako stary 32-bitowy time_telement , możesz zdefiniować element _USE_32BIT_TIME_T. Nie zalecamy jej, ponieważ aplikacja może zakończyć się niepowodzeniem po 18 stycznia 2038 r., maksymalny zakres 32-bitowego time_tzakresu. W ogóle nie jest to dozwolone na platformach 64-bitowych.

Struktura czasu przekazywana w pliku jest zmieniana w następujący sposób, tak jak zmieniana przez _mktime funkcje: tm_wday pola i tm_yday są ustawiane na nowe wartości na podstawie wartości tm_mday i tm_year. Ponieważ zakłada się, że czas UTC, tm_isdst pole jest ignorowane.

Zakres _mkgmtime32 funkcji to od północy, 1 stycznia 1970, UTC do 23:59:59 stycznia 18, 2038, UTC. Zakres _mkgmtime64 to od północy, 1 stycznia 1970, UTC do 23:59:59, 31 grudnia 3000, UTC. Data poza zakresem powoduje zwrócenie wartości -1. Zakres _mkgmtime zależy od tego, czy _USE_32BIT_TIME_T jest zdefiniowany. Jeśli nie jest ona zdefiniowana, co jest wartością domyślną, zakres jest taki sam jak _mkgmtime64. W przeciwnym razie zakres jest ograniczony do zakresu 32-bitowego ._mkgmtime32

Zarówno gmtime , jak i localtime używają wspólnego buforu statycznego do konwersji. Jeśli podasz ten bufor do _mkgmtime, poprzednia zawartość zostanie zniszczona.

Przykłady

// 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

W poniższym przykładzie pokazano, jak niekompletna struktura jest wypełniana przez _mkgmtimeelement . Oblicza wartości zarówno dla dnia tygodnia, jak i roku.

// 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

Zobacz też

Zarządzanie czasem
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