mktime, _mktime32, _mktime64

Konvertiert die Ortszeit in einen Kalenderwert.

Syntax

time_t mktime(
   struct tm *timeptr
);
__time32_t _mktime32(
   struct tm *timeptr
);
__time64_t _mktime64(
   struct tm *timeptr
);

Parameter

timeptr
Zeiger auf Zeitstruktur; siehe asctime.

Rückgabewert

_mktime32 gibt die angegebene Kalenderzeit als Wert vom Typ time_tcodiert zurück. Wenn timeptr auf ein Datum vor Mitternacht, dem 1. Januar 1970 verwiesen wird oder die Kalenderzeit nicht dargestellt werden kann, _mktime32 wird -1 in den Typ time_t"-1" zurückgegeben. Wenn sie ein Datum nach dem 23:59:59. Januar 2038, koordinierte Weltzeit (UTC) verwenden _mktime32 und timeptr darauf verweisen, wird -1 in den Typ time_t"-1" zurückgegeben.

_mktime64 gibt "-1" als Typ __time64_t zurück, wenn timeptr auf ein Datum nach 23:59:59, dem 31. Dezember 3000, UTC verwiesen wird.

Hinweise

Die mktimeund _mktime32_mktime64 die Funktionen konvertieren die bereitgestellte Zeitstruktur (möglicherweise unvollständig), auf die durch timeptr eine vollständig definierte Struktur mit normalisierten Werten verwiesen wird, und konvertiert sie dann in einen time_t Kalenderzeitwert. Die konvertierte Zeit hat dieselbe Codierung wie die von der time Funktion zurückgegebenen Werte. Die ursprünglichen Werte der tm_wday Struktur und tm_yday komponenten der timeptr Struktur werden ignoriert, und die ursprünglichen Werte der anderen Komponenten sind nicht auf ihre normalen Bereiche beschränkt.

mktime ist eine Inlinefunktion, die entspricht _mktime64, es sei denn _USE_32BIT_TIME_T , sie ist definiert, in diesem Fall entspricht sie _mktime32.

Nach einer Anpassung an die koordinierte Weltzeit (UTC) verarbeitet _mktime32 Datumsangaben von Mitternacht (UTC) des 1. Januar 1970 bis 23:59:59 (UTC) des 18. Januar 2038. _mktime64 behandelt Datumsangaben von Mitternacht, 1. Januar 1970 bis 23:59:59, 31. Dezember 3000. Diese Anpassung kann dazu führen, dass diese Funktionen -1 (umwandeln in time_toder __time32_t__time64_t) zurückgeben, obwohl sich das angegebene Datum innerhalb des Bereichs befindet. Wenn Sie sich beispielsweise in Kairo, Ägypten befinden, das zwei Stunden vor UTC liegt, werden zwei Stunden zuerst vom angegebenen Datum timeptrsubtrahiert; die Subtraktion kann jetzt Ihr Datum außerhalb des gültigen Bereichs setzen.

Diese Funktionen können verwendet werden, um eine tm Struktur zu überprüfen und auszufüllen. Bei Erfolg legen diese Funktionen ggf. die Werte aus tm_wday und tm_yday fest. Die anderen Komponenten werden so festgelegt, dass die angegebene Kalenderzeit dargestellt wird, jedoch mit den in den Normalbereichen erzwungenen Werten. Der endgültige Wert wird tm_mday erst festgelegt, wenn tm_mon er tm_year bestimmt wird. Wenn Sie eine tm-Strukturzeit angeben, legen Sie das Feld tm_isdst auf Folgendes 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 bestimmt das Verhalten der Sommerzeit aus der TZ Umgebungsvariable. Falls TZ nicht festgelegt, wird der Win32-API-Aufruf GetTimeZoneInformation verwendet, um die Informationen zur Sommerzeit vom Betriebssystem abzurufen. Wenn der Aufruf fehlschlägt, geht die Bibliothek davon aus, dass die Regeln der USA für die Implementierung der Berechnung der Sommerzeit verwendet werden. tm_isdst ist ein Pflichtfeld. Wenn es nicht festgelegt wird, wird sein Wert nicht definiert und der Rückgabewert dieser Funktionen ist unvorhersehbar. Wenn timeptr auf eine tm Struktur verweist, die von einem vorherigen Aufruf von asctime, oder gmtimelocaltime (oder Varianten dieser Funktionen) zurückgegeben wird, enthält das tm_isdst Feld den richtigen Wert.

Die gmtime Funktionen und localtime (und _gmtime64_gmtime32, , _localtime32und _localtime64) verwenden einen einzelnen Puffer pro Thread für die Konvertierung. Wenn Sie diesen Puffer für mktime, _mktime32 oder _mktime64 bereitstellen, wird der vorherige Inhalt zerstört.

Diese Funktionen überprüfen ihre Parameter. Wenn timeptr es sich um einen Nullzeiger handelt, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben die Funktionen – 1 zurück und legen errno auf EINVAL fest.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Routine Erforderlicher Header
mktime <time.h>
_mktime32 <time.h>
_mktime64 <time.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Bibliotheken

Alle Versionen der C-Laufzeitbibliotheken.

Beispiel

// crt_mktime.c
/* The example takes a number of days
* as input and returns the time, the current
* date, and the specified number of days.
*/

#include <time.h>
#include <stdio.h>

int main( void )
{
   struct tm  when;
   __time64_t now, result;
   int        days;
   char       buff[80];

   time( &now );
   _localtime64_s( &when, &now );
   asctime_s( buff, sizeof(buff), &when );
   printf( "Current time is %s\n", buff );
   days = 20;
   when.tm_mday = when.tm_mday + days;
   if( (result = mktime( &when )) != (time_t)-1 ) {
      asctime_s( buff, sizeof(buff), &when );
      printf( "In %d days the time will be %s\n", days, buff );
   } else
      perror( "mktime failed" );
}

Beispielausgabe

Current time is Fri Apr 25 13:34:07 2003

In 20 days the time will be Thu May 15 13:34:07 2003

Siehe auch

Zeitverwaltung
asctime, _wasctime
gmtime, _gmtime32, _gmtime64
localtime, _localtime32, _localtime64
_mkgmtime, _mkgmtime32, _mkgmtime64
time, _time32, _time64