Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

mktime, mktime64 - Ortszeit in Zeit seit Epochenwert umwandeln

&pagelevel(4)&pagelevel

Definition

#include <time.h>

time_t mktime(struct tm *timeptr);
time64_t mktime64(struct tm *timeptr);

Beschreibung

Die Funktionen mktime() und mktime64() wandeln einen in Lokalzeit angegebenem Zeitpunkt, die in einer Struktur vom Typ tm angegeben werden, in die Anzahl der Sekunden um, die seit dem 1.1.1970 00:00:00 Uhr UTC (Universal Time Coordinated) vergangen sind.

Die beiden Funktionen unterscheiden sich lediglich durch den Bereich darstellbarer Daten:

  • mktime(): 13.12.1901 20:45:52 Uhr UTC bis 19.1.2038 03:14:07 Uhr

  • mktime64(): 1.1.1900 20:45:52 Uhr UTC bis 31.12.9999 23:59:59 Uhr

Die tm-Struktur hat das folgende Format:

struct tm {
      int     tm_sec;         /* Sekunden [0, 61]  */
      int     tm_min;         /* Minuten [0, 59] */
      int     tm_hour;        /* Stunde [0, 23] */
      int     tm_mday;        /* Monatstag [1, 31] */
      int     tm_mon;         /* Monat [0, 11] */
      int     tm_year;        /* Jahre seit 1900 */
      int     tm_wday;        /* Tage seit Sonntag [0, 6] */
      int     tm_yday;        /* Tage seit 1. Januar [0, 365] */
      int     tm_isdst;       /* Schalter für Sommerzeit */
}; 

Neben der Berechnung der Kalenderzeit normalisiert mktime() die übergebene tm-Struktur. Die Originalwerte der Komponenten tm_wday und tm_yday werden ignoriert; die Originalwerte der anderen Komponenten der Struktur sind nicht auf die oben angegebenen Grenzen beschränkt. Bei erfolgreicher Ausführung werden die Komponenten tm_wday und tm_yday entsprechend gesetzt; die anderen Komponenten werden so eingestellt, dass sie die angegebene Kalenderzeit darstellen, wobei die entsprechenden Wertebereiche eingehalten werden. Der endgültige Wert von tm_mday wird nicht gesetzt, bis tm_mon und tm_year bestimmt sind.

Die Originalwerte der Komponenten können größer oder kleiner als die angegebenen Bereiche sein. Beispielsweise zeigt der Wert -1 für tm_hour eine Stunde vor Mitternacht an; enthält tm_mday den Wert 0, so wird der Tag vor dem aktuellen Monat bezeichnet; steht tm_mon auf -2, so bedeutet dies zwei Monate vor Januar des Jahres tm_year.

Ist tm_isdst > 0, wird angenommen, dass sich die ursprünglichen Werte in der alternativen Zeitzone befinden, d.h. dass Sommerzeit gilt. Stellt sich heraus, dass die alternative Zeitzone für die berechnete Kalenderzeit ungültig ist, werden die Komponenten an die primäre Zeitzone angepasst. Wenn tm_isdst null ist, wird angenommen, dass sich die Originalwerte in der primären Zeitzone befinden, d.h. dass Normalzeit gilt; diese Werte werden in die alternative Zeitzone übersetzt, falls die primäre Zeitzone ungültig ist. Wenn tm_isdst negativ ist, ermittelt mktime() die korrekte Zeitzone.

Die lokale Zeitzoneninformationen werden so gesetzt als wenn mktime() die Funktion tzset() aufgerufen würde.

BS2000 mktime() wandelt Datum und Uhrzeit, die der Benutzer in einer Struktur vom Typ tm angibt, in eine Zeitangabe vom Typ time_t um. Dies ist die Anzahl der vergangenen Sekunden, bezogen auf den Stichtag 1. Januar 1970 00.00.00 Uhr. (Ende)

Returnwert

Anzahl der Sekunden

bei Erfolg.

(time_t) - 1 bzw. (time64_t) - 1

wenn die Kalenderzeit nicht dargestellt werden kann. Außerdem wird errno auf EOVERFLOW gesetzt.

BS2000
Bei Ortszeiten ab dem 1. Januar 1970 00.00.00 die Anzahl der Sekunden, die seither vergangen sind (positiver Wert).

Bei Ortszeiten vor dem 1. Januar 1970 00.00.00 die Anzahl der Sekunden, die bis dahin vergangen sind (negativer Wert). (Ende)

Beispiel

Welcher Wochentag war der 4. Juli 2001?

#include <stdio.h>
#include <time.h>
struct tm time_str
char daybuf[20]
int main (void)
{
      time_str.tm_year = 2001 - 1900;
      time_str.tm_mon = 7 - 1;
      time_str.tm_mday = 4;
      time_str.tm_hour = 0;
      time_str.tm_min = 0;
      time_str.tm_sec = 1;
      time_str.tm_isdst = -1;
      if (mktime ( &time_str) == -1)
              (void) puts (" -unknown-“);
      else { 
              (void) strftime (daybuf, sizeof (daybuf), "%A", &time_str);
       }
       return 0;
}

Hinweis

Da bei Erfolg auch -1 zurückgeliefert werden kann, sollte eine Anwendung zur Überprüfung von Fehlersituationen errno auf 0 setzen, bevor die Funktion aufgerufen wird.
Wenn -1 zurückgeliefert wird, dann sollte die Anwendung prüfen, ob errno ungleich 0 ist.

Siehe auch

ctime(), getenv(), timezone, time.h.