Namensräume
Varianten
Aktionen

localtime, localtime_r, localtime_s

Von cppreference.com
< c‎ | chrono
Definiert in Header <time.h>
struct tm* localtime  ( const time_t* timer );
(1)
struct tm* localtime_r( const time_t* timer, struct tm* buf );
(2) (seit C23)
struct tm* localtime_s( const time_t* restrict timer, struct tm* restrict buf );
(3) (seit C11)
1) Konvertiert die gegebene Zeit seit der Epoche (ein time_t-Wert, auf den timer zeigt) in Kalenderzeit, ausgedrückt in lokaler Zeit, im struct tm-Format. Das Ergebnis wird in statischem Speicher gespeichert und ein Zeiger auf diesen statischen Speicher wird zurückgegeben.
2) Wie (1), außer dass die Funktion benutzerbereitgestellten Speicher buf für das Ergebnis verwendet.
3) 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 grenzgeprüften Funktionen ist localtime_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 oder Nullzeiger bei Misserfolg. 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 lokale Kalenderzeit sein kann).

[bearbeiten] Hinweise

Die Funktion localtime ist möglicherweise nicht threadsicher.

POSIX schreibt vor, dass localtime und localtime_r errno auf EOVERFLOW setzen, wenn sie fehlschlägt, weil das Argument zu groß ist.

POSIX spezifiziert, dass die Zeitzoneninformationen von localtime und localtime_r so bestimmt werden, als ob tzset aufgerufen würde, was die Umgebungsvariable TZ liest.

Die Implementierung von localtime_s in Microsoft CRT ist inkompatibel mit dem C-Standard, da sie eine umgekehrte Parameterreihenfolge hat und errno_t zurückgibt.

[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.4 Die Funktion localtime (S. TBD)
  • K.3.8.2.4 Die Funktion localtime_s (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.27.3.4 Die Funktion localtime (S. 288)
  • K.3.8.2.4 Die Funktion localtime_s (S. 455)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.27.3.4 Die Funktion localtime (S. 394)
  • K.3.8.2.4 Die Funktion localtime_s (S. 627)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.23.3.4 Die Funktion localtime (S. 343)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.12.3.4 Die Funktion localtime

[bearbeiten] Siehe auch

konvertiert Zeit seit Epoche in Kalenderzeit, ausgedrückt als koordinierte Weltzeit (UTC)
(Funktion) [bearbeiten]
C++ Dokumentation für localtime