strftime ()- Datum/Zeit in Zeichenfolge konvertieren

Format

#include <time.h>
size_t strftime(char *s, size_t maxsize, const char *format,
                   const struct tm *timeptr);

Sprachniveau

ANSI

Sicher für Threads

Ja

Länderspezifisch

Das Verhalten dieser Funktion kann durch die Kategorien LC_CTYPE, LC_TIME und LC_TOD der aktuellen Ländereinstellung beeinflusst werden. Weitere Informationen finden Sie unter CCSIDs und Ländereinstellungen verstehen.

Beschreibung

Die Funktion strftime() platziert Bytes in dem Array, auf das von s verwiesen wird, wie durch die Zeichenfolge gesteuert, auf die durch formatverwiesen wird. Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifikationen und normalen Zeichen. Eine Konvertierungsspezifikation besteht aus einem Prozentzeichen (%) und einem abschließenden Konvertierungszeichen, das das Verhalten der Konvertierung bestimmt. Alle normalen Zeichen (einschließlich des abschließenden Nullbyte und Mehrbytezeichen) werden unverändert in das Array kopiert. Wenn das Kopieren zwischen Objekten stattfindet, die sich überlappen, ist das Verhalten nicht definiert. Es werden nicht mehr als maxsize Byte in das Array eingefügt. Die entsprechenden Zeichen werden durch die Werte in der Struktur bestimmt, auf die durch timeptrverwiesen wird, und durch die Werte, die in der aktuellen Ländereinstellung gespeichert sind.

Jede Standardkonvertierungsspezifikation wird durch entsprechende Zeichen ersetzt, wie in der folgenden Tabelle beschrieben:

Kennung Bedeutung
%a Abgekürzter Name des Wochentags
%A Vollständiger Name des Wochentags.
%b Abgekürzter Monatsname.
%B Vollständiger Monatsname.
%c Datum/Uhrzeit im Format der Ländereinstellung.
%C Jahrhundert [00-99], das Jahr dividiert durch 100 und abgeschnitten auf eine ganze Zahl.
%d Tag des Monats [01-31].
%D Datumsformat, wie %m/%d/%y.
%e Entspricht %d, außer dass vor einer einzelnen Ziffer ein Leerzeichen [1-31] steht.
%g Zweistellige Jahresangabe des ISO-Wochendatums [00,99].
%F ISO-Datumsformat, wie %Y-%m-%d.
%G 4-stelliger Jahresanteil des ISO-Wochendatums Kann negativ sein.
%H Entspricht %b
%H Stunde im 24-Stunden-Format [00-23].
%I Stunde im 12-Stunden-Format [01-12].
%j Tag des Jahres [001-366].
%m Monat [01-12].
%M Minute [00-59].
%n Zeilenvorschubzeichen.
%p AM-oder PM-Zeichenfolge.
%r Zeit im Format AM/PM der Ländereinstellung. Wenn nicht im Zeitformat der Ländereinstellung verfügbar, wird standardmäßig das Zeitformat POSIX AM/PM verwendet: %I: %M: %S %p.
%r 24-Stunden-Zeitformat ohne Sekunden, wie %H: %M.
%S Sekunde [00-61]. Der Bereich für Sekunden ermöglicht eine Schaltsekunde und eine doppelte Schaltsekunde.
%t Tabulatorzeichen.
%T 24-Stunden-Zeitformat mit Sekunden, identisch mit %H: %M: %S.
%u Wochentag [1, 7]. Montag ist 1 und Sonntag ist 7.
%U Wochennummer des Jahres [00-53]. Sonntag ist der erste Tag der Woche.
% V ISO-Wochennummer des Jahres [01-53]. Montag ist der erste Tag der Woche. Wenn die Woche, die den 1. Januar enthält, vier oder mehr Tage im neuen Jahr hat, wird sie als Woche 1 betrachtet. Andernfalls ist dies die letzte Woche des Vorjahres und das nächste Jahr ist Woche 1 des neuen Jahres.
%w Wochentag [0, 6], Sonntag ist 0.
%W Wochennummer des Jahres [00-53]. Montag ist der erste Tag der Woche.
%x Datum im Format der Ländereinstellung.
%X Zeit im Format der Ländereinstellung.
%y Jahr [00,99].
%Y Vierstellige Jahresangabe. Kann negativ sein.
%Z UTC-Offset. Die Ausgabe ist eine Zeichenfolge im Format +HHMM oder -HHMM, wobei + für den Osten der GMT,-für den Westen der GMT, HH für die Anzahl der Stunden ab GMT und MM für die Anzahl der Minuten ab GMT steht.
%Z Zeitzonenname.
%% Zeichen%.

Modifizierte Konvertierungskennungen

Einige Konvertierungskennungen können durch die Änderungszeichen E oder O geändert werden, um anzugeben, dass ein alternatives Format oder eine Spezifikation verwendet werden soll und nicht das, was normalerweise von der unveränderten Konvertierungskennung verwendet wird. Wenn eine modifizierte Konvertierungskennung ein Feld in der aktuellen Ländereinstellung verwendet, das nicht verfügbar ist, entspricht das Verhalten der unveränderten Konvertierungsspezifikation. Wenn die Zeichenfolge era beispielsweise die leere Zeichenfolge "" ist, was bedeutet, dass die Zeichenfolge nicht verfügbar ist, würde sich %EY wie %Y verhalten.

Kennung Bedeutung
%ec Datum/Uhrzeit für aktuelle Epoche.
%ec Name der Ära.
%Ex Datum für aktuelle Epoche.
%EX Zeit für die aktuelle Epoche.
%Ej Epochenjahr. Dies ist der Offset vom Basisjahr.
%EY Jahr für aktuelle Ära.
%Od Tag des Monats mit alternativen Ziffern.
%Oe Identisch mit %Od
%OH Stunde im 24-Stunden-Format mit alternativen Ziffern.
%OI Stunde im 12-Stunden-Format mit alternativen Ziffern.
%Om Monat mit alternativen Ziffern.
%OM Minuten mit alternativen Ziffern.
%Betriebssystem Sekunden mit alternativen Ziffern.
%Ou Wochentag mit alternativen Ziffern. Montag ist 1 und Sonntag ist 7.
%OU Wochennummer des Jahres mit alternativen Ziffern. Sonntag ist der erste Tag der Woche.
%OV ISO-Wochennummer des Jahres mit alternativen Ziffern. Siehe %V zur Erläuterung der ISO-Wochennummer.
%Ow Wochentag mit alternativen Ziffern. Sonntag ist 0.
%OW Wochennummer des Jahres mit alternativen Ziffern. Montag ist der erste Tag der Woche.
%Oy Zweistellige Jahresangabe mit alternativen Ziffern.
%OZ Wenn der Zeitzonenname in der aktuellen Ländereinstellung vorhanden ist, entspricht dies %Z; andernfalls wird der abgekürzte Zeitzonenname des aktuellen Jobs zurückgegeben.
Hinweis: %C, %D, %e, %h, %n, %r, %R, %t, %T, %u, %V und die geänderten Konvertierungskennungen sind nicht verfügbar, wenn LOCALETYPE (*CLD) im Kompilierungsbefehl angegeben ist.

Rückgabewert

Wenn die Gesamtzahl der Ergebnisbyte einschließlich des abschließenden Nullbyte nicht größer als maxsize ist, gibt strftime() die Anzahl der Byte zurück, die in das Array eingefügt wurden, auf das von sverwiesen wird, ohne das abschließende Nullbyte. Andernfalls wird 0 zurückgegeben und der Inhalt des Arrays ist unbestimmt.

Wenn ein Konvertierungsfehler auftritt, kann errno auf ECONVERTgesetzt werden.

Beispiel

#include <stdio.h>
#include <time.h>
 
int main(void)
{
     char s[100];
     int rc;
     time_t temp;
     struct tm *timeptr;

     temp = time(NULL);
     timeptr = localtime(&temp);

     rc = strftime(s,sizeof(s),"Today is %A, %b %d.\nTime:  %r", timeptr);
     printf("%d characters written.\n%s\n",rc,s);

     return 0;
}

/*************************************************
     The output should be similar to:
     46 characters written
     Today is Wednesday, Oct 24.
     Time:  01:01:15 PM
************************************************************/

Zugehörige Informationen