Freigeben über


_mkgmtime, _mkgmtime32, _mkgmtime64

Konvertiert die UTC-Zeit, die durch tmstruct der UTC-Zeit dargestellt wird, die von einem Typ time_t dargestellt wird.

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

Parameter

  • timeptr
    Ein Zeiger der UTC-Zeit als structtm zu konvertieren.

Rückgabewert

Eine Verzerrung Typ __time32_t oder __time64_t, die die Anzahl von Sekunden darstellen, Verstrichene seit Mitternacht am 1. Januar 1970 in der koordinierten Weltzeit (UTC). Wenn Datum aus Bereichs (sieht im Abschnitt Hinweise) ist, oder die Eingabe kann nicht als Gültigkeitszeit interpretiert werden, ist der Rückgabewert - 1.

Hinweise

Die Funktionen _mkgmtime32 und _mkgmtime64 konvertieren die UTC-Zeit in einem __time32_t oder __time64_t-Typ, der die Uhrzeit in die koordinierte Weltzeit darstellt. Um eine lokale Zeit in die UTC-Zeit zu konvertieren, verwenden Sie mktime, _mktime32 und _mktime64.

_mkgmtime ist eine Inlinefunktion, die zu _mkgmtime64, und time_t entspricht __time64_t. Wenn Sie dem Compiler erzwingen müssen, um time_t als 32-Bit- alte time_t interpretiert, können Sie _USE_32BIT_TIME_T definieren. Dies ist nicht empfehlenswert, da Ihre Anwendung möglicherweise nach dem 19. Januar 2038 (maximale Gültigkeitsbereichs von 32-Bit- time_t) fehlschlagen, und sie ist nicht an allen auf 64-Bit-Plattformen.

Die Zeitstruktur übergebene wird geändert, wie folgt ebenso wie sie mit den Funktionen _mktime geändert werden: die tm_wday und tm_yday Felder werden auf neue Werte auf Grundlage der Werte von tm_mday und tm_year festgelegt. Als, einer tm-Strukturzeit angibt, legen Sie das Feld auf tm_isdst fest:

  • Null (0) weist darauf hin, dass die Normalzeit gilt.

  • Ein Wert größer als 0 weist darauf hin, dass die Sommerzeit gilt.

  • Ein Wert kleiner als null gibt an, dass der C-Laufzeitbibliothekscode berechnet, ob Normalzeit oder Sommerzeit gilt.

Die C-Laufzeitbibliothek verwendet die TZ-Umgebungsvariable, um die richtige Sommerzeit zu bestimmen. Wenn T-Z nicht festgelegt ist, wird das Betriebssystem abgefragt, um das richtige Sommerzeitverhalten regionale abzurufen. tm_isdst ist ein Pflichtfeld. Wenn nicht festgelegt ist, wird sein Wert undefiniert und der Rückgabewert von mktime ist unvorhersehbar.

Der Bereich der Funktion _mkgmtime32 ist vom am 1. Januar 1970 Mitternacht UTC 19. Januar, 3:14: 07, 2038, UTC. Der Bereich von _mkgmtime64 ist vom Mitternacht am 1. Januar 1970 UTC in 23:59: 59 3000 am 31. Dezember, UTC. Ein außerhalb des Gültigkeitsbereichs liegender Datum ergibt einen Rückgabewert von 1. Der Bereich von _mkgmtime hängt davon ab, ob _USE_32BIT_TIME_T definiert wird. Wenn nicht (Standard) der Bereich, das von _mkgmtime64 definiert ist; Andernfalls wird der Bereich an 32-Bit-Bereich von _mkgmtime32 beschränkt.

Beachten Sie, dass gmtime und localtime einen einzelnen statisch zugehörigen Puffer für die Konvertierung verwenden. Wenn Sie diesen Puffer an mkgmtime angeben, wird die vorherige Inhalt zerstört.

Beispiel

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

}

Beispielausgabe

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 mit den berechneten Werten des Wochentags und des Tages des Jahres ergänzt wird.

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

}

Ausgabe

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

Referenz

Uhrzeitverwaltung

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