Namespaces
Variants

gmtime, gmtime_r, gmtime_s

From cppreference.net
Definiert im Header <time.h>
struct tm * gmtime ( const time_t * timer ) ;
(1)
struct tm * gmtime_r ( const time_t * timer, struct tm * buf ) ;
(2) (seit C23)
struct tm * gmtime_s ( const time_t * restrict timer, struct tm * restrict buf ) ;
(3) (seit C11)
1) Wandelt die angegebene Zeit seit der Epoche (einen time_t -Wert, auf den timer zeigt) in Kalenderzeit um, ausgedrückt in Koordinierter Weltzeit (UTC) im struct tm -Format. Das Ergebnis wird im statischen Speicher abgelegt und ein Zeiger auf diesen statischen Speicher wird zurückgegeben.
2) Gleich wie (1) , außer dass die Funktion den benutzerbereitgestellten Speicher buf für das Ergebnis verwendet.
3) Gleich wie (1) , außer dass die Funktion benutzerbereitgestellten Speicher buf für das Ergebnis verwendet und dass die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte Constraint-Handler -Funktion aufrufen:
  • timer oder buf ist ein Nullzeiger
Wie bei allen bounds-checked-Funktionen ist gmtime_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <time.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

timer - Zeiger auf ein time_t Objekt zur Konvertierung
buf - Zeiger auf ein struct tm Objekt zum Speichern des Ergebnisses

Rückgabewert

1) Zeiger auf ein statisches internes tm -Objekt bei Erfolg, andernfalls Nullzeiger. Die Struktur kann zwischen gmtime , localtime und ctime geteilt werden und kann bei jedem Aufruf überschrieben werden.
2,3) Kopie des buf -Zeigers oder Nullzeiger bei Fehler (was eine Verletzung der Laufzeitbeschränkung oder ein Fehler bei der Konvertierung der angegebenen Zeit in UTC sein kann).

Hinweise

gmtime ist möglicherweise nicht threadsicher.

POSIX verlangt, dass gmtime und gmtime_r den errno auf EOVERFLOW setzen, falls sie fehlschlagen, weil das Argument zu groß ist.

Die Implementierung von gmtime_s im Microsoft CRT ist nicht mit dem C-Standard kompatibel, da sie eine umgekehrte Parameterreihenfolge verwendet.

Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#define _XOPEN_SOURCE // for putenv
#include <stdio.h>
#include <stdlib.h>   // for putenv
#include <time.h>
int main(void)
{
    time_t t = time(NULL);
    printf("UTC:       %s", asctime(gmtime(&t)));
    printf("local:     %s", asctime(localtime(&t)));
    // POSIX-spezifisch
    putenv("TZ=Asia/Singapore");
    printf("Singapore: %s", asctime(localtime(&t)));
#ifdef __STDC_LIB_EXT1__
    struct tm buf;
    char str[26];
    asctime_s(str, sizeof str, gmtime_s(&t, &buf));
    printf("UTC:       %s", str);
    asctime_s(str, sizeof str, localtime_s(&t, &buf));
    printf("local:     %s", str);
#endif
}

Mögliche Ausgabe:

UTC:       Fri Sep 15 14:22:05 2017
local:     Fri Sep 15 14:22:05 2017
Singapore: Fri Sep 15 22:22:05 2017
UTC:       Fri Sep 15 14:22:05 2017
local:     Fri Sep 15 14:22:05 2017

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.27.3.3 Die gmtime-Funktion (S.: TBD)
  • K.3.8.2.3 Die gmtime_s-Funktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.27.3.3 Die gmtime-Funktion (S: 288)
  • K.3.8.2.3 Die gmtime_s-Funktion (S: 454-455)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.27.3.3 Die gmtime-Funktion (S: 393-394)
  • K.3.8.2.3 Die gmtime_s-Funktion (S: 626-627)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.23.3.3 Die gmtime-Funktion (S: 343)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.12.3.3 Die gmtime-Funktion

Siehe auch

wandelt Zeit seit Epoche in Kalenderzeit um, ausgedrückt als Ortszeit
(Funktion)