Namespaces
Variants

localtime, localtime_r, localtime_s

From cppreference.net
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) Wandelt die angegebene Zeit seit der Epoche (einen time_t -Wert, auf den timer zeigt) in Kalenderzeit um, ausgedrückt in Ortszeit, 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) , mit der Ausnahme, dass die Funktion 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 den aktuell installierten constraint handler aufrufen:
  • timer oder buf ist ein Nullzeiger
Wie bei allen bounds-checked-Funktionen ist localtime_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 zur Speicherung 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 die lokale Kalenderzeit sein kann).

Hinweise

Die Funktion localtime ist möglicherweise nicht threadsicher. Die Microsoft CRT Implementierung ist threadsicher.

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

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

Die Implementierung von localtime_s im Microsoft CRT ist nicht mit dem C-Standard kompatibel, da sie eine umgekehrte Parameterreihenfolge aufweist und errno_t zurückgibt.

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

Siehe auch

wandelt Zeit seit Epoche in Kalenderzeit um, ausgedrückt als Koordinierte Weltzeit (UTC)
(Funktion)
C++-Dokumentation für localtime