Namensräume
Varianten
Aktionen

gmtime, gmtime_r, gmtime_s

Von cppreference.com
< c‎ | chrono
Definiert in 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) Konvertiert die gegebene Zeit seit der Epoche (ein von timer aufgerufener time_t-Wert) in Kalenderzeit, ausgedrückt in koordinierter Weltzeit (UTC) im struct tm-Format. Das Ergebnis wird in einem statischen Speicherbereich gespeichert und ein Zeiger auf diesen statischen Speicherbereich wird zurückgegeben.
2) Wie (1), außer dass die Funktion den vom Benutzer bereitgestellten Speicherbereich buf für das Ergebnis verwendet.
3) Wie (1), außer dass die Funktion den vom Benutzer bereitgestellten Speicherbereich buf für das Ergebnis verwendet und dass die folgenden Fehler zur Laufzeit erkannt und die aktuell installierte Constraint-Handler-Funktion aufgerufen wird
  • timer oder buf ist ein Nullzeiger
Wie bei allen grenzgeprüften Funktionen ist gmtime_s nur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert wird und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <time.h> auf die ganzzahlige Konstante 1 setzt.

Inhalt

[bearbeiten] Parameter

timer - Zeiger auf ein time_t-Objekt, das konvertiert werden soll
buf - Zeiger auf ein struct tm-Objekt, in dem das Ergebnis gespeichert werden soll

[bearbeiten] Rückgabewert

1) Zeiger auf ein statisches internes tm-Objekt bei Erfolg, andernfalls ein 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 einem Fehler (der eine Laufzeit-Constraint-Verletzung oder ein Fehler bei der Konvertierung der angegebenen Zeit in UTC sein kann).

[bearbeiten] Hinweise

gmtime ist möglicherweise nicht threadsicher.

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

Die Implementierung von gmtime_s in der Microsoft CRT ist mit dem C-Standard inkompatibel, da sie eine umgekehrte Parameterreihenfolge aufweist.

[bearbeiten] 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-specific
    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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

konvertiert Zeit seit Epoche in Kalenderzeit, ausgedrückt als lokale Zeit
(Funktion) [bearbeiten]
C++-Dokumentation für gmtime