_mkgmtime, _mkgmtime32, _mkgmtime64
Konvertiert die UTC-Zeit, die von tmstruct zur UTC-Zeit dargestellt wird, die durch einen time_t Typ dargestellt wird.
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
Parameter
- timeptr
Ein Zeiger auf die structals UTC-Zeittm zu konvertieren.
Rückgabewert
Eine Menge Typ __time32_t oder __time64_t , die die Anzahl der seit Mitternacht vergangenen Sekunden darstellen, verstrich am 1. Januar 1970 in koordinierter Weltzeit (UTC).Wenn das Datum außerhalb des gültigen Bereichs (finden Sie im Abschnitt " Hinweise ") ist, oder die Eingabe kann nicht als Gültigkeitszeit interpretiert werden, ist der Rückgabewert 1.
Hinweise
Die _mkgmtime32 und _mkgmtime64-Funktion konvertieren eine UTC-Zeit auf einen __time32_t oder __time64_t Typ, der die Zeit in UTC darstellt.So erstellen Sie eine lokale Zeit zur UTC-Zeit zur Verwendung mktime, _mktime32und stattdessen _mktime64 zu konvertieren.
_mkgmtime ist eine Inlinefunktion, die _mkgmtime64ergibt, und time_t ist mit __time64_t.Wenn Sie den Compiler erzwingen müssen, um alte als time_t32-Bit- time_tinterpretiert wird, können Sie _USE_32BIT_TIME_Tdefinieren.Dies wird nicht empfohlen, da Ihre Anwendung möglicherweise nach dem 19. Januar 2038 (maximale) liegt außerhalb der 32-Bit-Version time_tfehlschlagen, und sie wird für alle auf 64-Bit-Plattformen nicht zulässig.
Die Zeit Struktur, die übergeben wird, wird genauso wie folgt geändert, wie sie mit den _mktime Funktionen geändert werden: tm_wday und die tm_yday Felder werden auf den neuen Werten anhand der Werte von tm_mday und tm_yearfestgelegt.Wenn Sie eine Struktur tm Zeit angibt, legen Sie das tm_isdst Feld fest:
Mit 0 (null), wenn Normalzeit gültig ist.
Ein Wert größer als 0, um anzugeben, dass die Sommerzeit gültig ist.
Ein Wert kleiner als Null, wenn die Berechnung des C-Laufzeitbibliotheks-Code, ob die Standardzeit oder Sommerzeit gültig ist.
Die C-Laufzeitbibliothek nutzt die TZ-Umgebungsvariable, um die richtige Sommerzeit zu bestimmen.Wenn TZ nicht festgelegt ist, wird das Betriebssystem abgefragt, um das richtige regionale Sommerzeit Verhalten abzurufen.tm_isdst ist ein Pflichtfeld.Wenn dies nicht festgelegt ist, wird ihr Wert undefined und der Rückgabewert von mktime ist unvorhersehbar.
Der Bereich der _mkgmtime32 Funktion ist vom am 1. Januar 1970 Mitternacht UTC 19. Januar, 3:14: 07, 2038, UTC.Der Bereich von Mitternacht UTC am 1. Januar 1970 ist vom _mkgmtime64 in 23:59: 59 3000 am 31. Dezember, UTC.Ein Datum außerhalb des Gültigkeitsbereichs ergibt einen Rückgabewert 1.Der Bereich von _mkgmtime hängt davon ab, ob _USE_32BIT_TIME_T definiert ist.Wenn keine (Standard) der Bereich, der von _mkgmtime64definiert ist. Andernfalls wird der Bereich auf den 32-Bit-Bereich von _mkgmtime32beschränkt.
Beachten Sie, dass gmtime und localtime einen einzelnen statisch verknüpften Puffer für die Konvertierung verwenden.Wenn Sie diesen Puffer an mkgmtimebereitstellen, werden die vorherigen Inhalte gelöscht.
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
Im Folgenden Beispiel wird gezeigt, wie die unvollständige Struktur mit den berechneten Werten des Wochentags und Tag 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 );
}
Output
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
gmtime_s, _gmtime32_s, _gmtime64_s