Namensräume
Varianten
Aktionen

asctime, asctime_s

Von cppreference.com
< c‎ | chrono
Definiert in Header <time.h>
(1)
char*                asctime( const struct tm* time_ptr );
(bis C23)
[[deprecated]] char* asctime( const struct tm* time_ptr );
(seit C23)
errno_t asctime_s( char* buf, rsize_t bufsz, const struct tm* time_ptr );
(2) (seit C11)
1) Konvertiert die angegebene Kalenderzeit tm in eine Textdarstellung im folgenden festen 25-Zeichen-Format: Www Mmm dd hh:mm:ss yyyy\n
  • Www - dreibuchstabige englische Abkürzung für den Wochentag aus time_ptr->tm_wday, eine von Mon, Tue, Wed, Thu, Fri, Sat, Sun.
  • Mmm - dreibuchstabige englische Abkürzung für den Monat aus time_ptr->tm_mon, eine von Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.
  • dd - zweistelliger Tag des Monats aus timeptr->tm_mday, wie durch sprintf mit %2d formatiert.
  • hh - zweistellige Stunde aus timeptr->tm_hour, wie durch sprintf mit %.2d formatiert.
  • mm - zweistellige Minute aus timeptr->tm_min, wie durch sprintf mit %.2d formatiert.
  • ss - zweistellige Sekunde aus timeptr->tm_sec, wie durch sprintf mit %.2d formatiert.
  • yyyy - vierstellige Jahreszahl aus timeptr->tm_year + 1900, wie durch sprintf mit %4d formatiert.
Das Verhalten ist undefiniert, wenn ein Mitglied von *time_ptr außerhalb seines normalen Bereichs liegt.
Das Verhalten ist undefiniert, wenn das Kalenderjahr, das durch time_ptr->tm_year angegeben wird, mehr als 4 Ziffern hat oder kleiner als das Jahr 1000 ist.
Die Funktion unterstützt keine Lokalisierung, und das Zeilenumbruchzeichen kann nicht entfernt werden.
Die Funktion modifiziert statischen Speicher und ist nicht threadsicher.
Diese Funktion ist veraltet und sollte in neuem Code nicht verwendet werden.
(seit C23)
2) Wie (1), außer dass die Nachricht in den vom Benutzer bereitgestellten Speicher buf geschrieben wird, der garantiert nullterminiert ist, und die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte Constraint Handler Funktion aufrufen.
  • buf oder time_ptr ist ein Nullzeiger
  • bufsz ist kleiner als 26 oder größer als RSIZE_MAX
  • Nicht alle Mitglieder von *time_ptr liegen innerhalb ihrer normalen Bereiche
  • Das durch time_ptr->tm_year angegebene Jahr ist kleiner als 0 oder größer als 9999.
Wie bei allen grenzgeprüften Funktionen ist asctime_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

time_ptr - Zeiger auf ein tm-Objekt, das die auszugebende Zeit angibt
buf - Zeiger auf einen vom Benutzer bereitgestellten Puffer mit einer Länge von mindestens 26 Bytes
bufsz - Größe des vom Benutzer bereitgestellten Puffers

[bearbeiten] Rückgabewert

1) Zeiger auf eine statische, nullterminierte Zeichenkette, die die Textdarstellung von Datum und Uhrzeit wie oben beschrieben enthält. Die Zeichenkette kann zwischen asctime und ctime geteilt werden und kann bei jedem Aufruf einer dieser Funktionen überschrieben werden.
2) Null bei Erfolg, ungleich Null bei Fehler. In diesem Fall wird buf[0] auf Null gesetzt (es sei denn, buf ist ein Nullzeiger oder bufsz ist Null oder größer als RSIZE_MAX).

[bearbeiten] Hinweise

asctime gibt einen Zeiger auf statische Daten zurück und ist nicht threadsicher. POSIX markiert diese Funktion als veraltet und empfiehlt stattdessen strftime. Der C-Standard empfiehlt ebenfalls strftime anstelle von asctime und asctime_s, da strftime flexibler und lokalisierungssensibler ist.

POSIX beschränkt undefinierte Verhaltensweisen nur auf Fälle, in denen die Ausgabezeichenkette länger als 25 Zeichen wäre, wenn timeptr->tm_wday oder timeptr->tm_mon nicht im erwarteten Bereich liegen oder wenn timeptr->tm_year INT_MAX - 1990 überschreitet.

Einige Implementierungen behandeln timeptr->tm_mday == 0 als den letzten Tag des Vormonats.

[bearbeiten] Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <time.h>
 
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm)); // note implicit trailing '\n'
 
#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &tm);
    printf("%s", str);
#endif
}

Mögliche Ausgabe

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

[bearbeiten] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.27.2.1 Die Funktion asctime (S. 287)
  • K.3.8.2.1 Die Funktion asctime_s (S. 453-454)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.27.2.1 Die Funktion asctime (S. 392-393)
  • K.3.8.2.1 Die Funktion asctime_s (S. 624-625)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.23.3.1 Die Funktion asctime (S. 341-342)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.12.3.1 Die Funktion asctime

[bearbeiten] Siehe auch

(in C23 veraltet)(C11)
konvertiert ein time_t-Objekt in eine Textdarstellung
(Funktion) [bearbeiten]
konvertiert ein tm-Objekt in eine benutzerdefinierte Textdarstellung
(Funktion) [bearbeiten]
C++-Dokumentation für asctime