_mkgmtime, _mkgmtime32, _mkgmtime64

Konvertiert eine UTC-Zeit des Typs struct tm in eine UTC-Zeit des Typs time_t.

Syntax

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

Parameter

timeptr
Ein Zeiger auf die UTC-Zeit als struct tm für die Konvertierung.

Rückgabewert

Eine Menge von Typ __time32_t oder __time64_t, die die seit Mitternacht (UTC) des 1. Januar 1970 verstrichenen Sekunden darstellt. Wenn das Datum außerhalb des Gültigen Bereichs liegt (siehe Abschnitt "Hinweise") oder die Eingabe nicht als gültige Uhrzeit interpretiert werden kann, lautet der Rückgabewert -1.

Hinweise

Die Funktionen _mkgmtime32 und _mkgmtime64 konvertieren eine UTC-Zeit in eine durch Typ __time32_t oder __time64_t dargestellte Zeit in UTC. Verwenden Sie stattdessen mktime, _mktime32 und _mktime64, um eine Ortszeit in eine UTC-Zeit zu konvertieren.

_mkgmtime ist eine Inlinefunktion, die _mkgmtime64 auswertet, und time_t entspricht __time64_t. Wenn Sie den Compiler zwingen müssen, time_t als das alte 32-Bit-time_t zu interpretieren, definieren Sie _USE_32BIT_TIME_T. Es wird nicht empfohlen, da Ihre Anwendung nach dem 18. Januar 2038, dem maximalen Bereich einer 32-Bit-Version time_t, fehlschlägt. Es ist überhaupt nicht auf 64-Bit-Plattformen zulässig.

Die übergebene Zeitstruktur wird wie folgt geändert, genauso wie sie von den _mktime Funktionen geändert wird: die Felder tm_yday und die tm_wday Felder werden auf neue Werte basierend auf den Werten von tm_mday und .tm_year Da die Zeit als UTC angenommen wird, wird das tm_isdst Feld ignoriert.

Der Bereich der Funktion _mkgmtime32 liegt zwischen Mitternacht (UTC) des 1. Januar 1970 und 23:59:59 (UTC) des 18. Januar 2038. Der Bereich der Funktion _mkgmtime64 liegt zwischen Mitternacht (UTC) des 1. Januar 1970 und 23:59:59 (UTC) des 31. Dezember 3000. Ein Out-of-Range-Datum führt zu einem Rückgabewert von -1. Der Bereich von _mkgmtime hängt davon, ob _USE_32BIT_TIME_T definiert wurde. Wenn sie nicht definiert ist, was die Standardeinstellung ist, ist der Bereich identisch mit _mkgmtime64. Andernfalls ist der Bereich auf den 32-Bit-Bereich von _mkgmtime32.

Beides gmtime und localtime verwenden einen gemeinsamen statischen Puffer für die Konvertierung. Wenn Sie diesen Puffer für _mkgmtime bereitstellen, werden alle vorherigen Inhalte zerstört.

Beispiele

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

Das folgende Beispiel zeigt, wie die unvollständige Struktur ausgefüllt wird._mkgmtime Es berechnet Werte sowohl für den Wochentag als auch für das Jahr.

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

Siehe auch

Zeitverwaltung
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