_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