Namespaces
Variants

std:: get_time

From cppreference.net
< cpp ‎ | io ‎ | manip
Definiert im Header <iomanip>
template < class CharT >
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ;
(seit C++11)

Wenn in einem Ausdruck verwendet in >> get_time ( tmb, fmt ) , analysiert die Zeicheneingabe als Datums-/Zeitwert gemäß Formatzeichenkette fmt entsprechend dem std::time_get -Facette der Lokalität, die aktuell im Eingabestrom in eingebunden ist. Der resultierende Wert wird in einem std::tm -Objekt gespeichert, auf das durch tmb gezeigt wird.

Inhaltsverzeichnis

Parameter

tmb - gültiger Zeiger auf das std::tm Objekt, in dem das Ergebnis gespeichert wird
fmt - pointer to a null-terminated CharT string specifying the conversion format

Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern, Leerzeichen und gewöhnlichen Zeichen (außer % ). Von jedem gewöhnlichen Zeichen wird erwartet, dass es genau ein Zeichen im Eingabestrom bei Groß-/Kleinschreibung-unabhängigem Vergleich entspricht. Jedes Leerzeichen entspricht beliebigem Leerraum in der Eingabezeichenfolge. Jede Konvertierungsspezifikation beginnt mit dem % -Zeichen, optional gefolgt von einem E - oder O -Modifizierer (wird ignoriert, wenn er von der Locale nicht unterstützt wird), gefolgt von dem Zeichen, das das Verhalten der Spezifizierung bestimmt. Die Formatspezifizierer entsprechen der POSIX-Funktion strptime() :

Konvertierungsspezifizierer
Erklärung Schreibt in Felder
% entspricht einem wörtlichen % . Die vollständige Konvertierungsangabe muss %% lauten (keine)
t entspricht jedem Leerzeichen (keine)
n entspricht beliebigem Leerraum (keine)
Jahr
Y erfasst das vollständige Jahr als 4-stellige Dezimalzahl, führende Nullen sind erlaubt aber nicht erforderlich tm_year
EY analysiert das Jahr in der alternativen Darstellung, z.B. 平成23年 (Jahr Heisei 23), welches 2011 in tm_year im ja_JP-Locale schreibt tm_year
y analysiert die letzten 2 Ziffern des Jahres als Dezimalzahl. Bereich [69,99] ergibt Werte 1969 bis 1999, Bereich [00,68] ergibt 2000-2068 tm_year
Oy analysiert die letzten 2 Ziffern des Jahres unter Verwendung des alternativen Zahlensystems, z.B. wird 十一 als 11 im ja_JP-Locale analysiert tm_year
Ey interpretiert year als Offset vom alternativen Kalenderzeitraum des Gebietsschemas %EC tm_year
C analysiert die ersten 2 Ziffern von year als Dezimalzahl (Bereich [00,99] ) tm_year
EC analysiert den Namen des Basisjahres (Zeitraums) in der alternativen Darstellung des Gebietsschemas, z.B. 平成 (Heisei-Ära) in ja_JP tm_year
Monat
b analysiert den Monatsnamen, entweder vollständig oder abgekürzt, z.B. Oct tm_mon
h Synonym von b tm_mon
B Synonym von b tm_mon
m interpretiert den Monat als Dezimalzahl (Bereich [01,12] ), führende Nullen erlaubt, aber nicht erforderlich tm_mon
Om analysiert den Monat unter Verwendung des alternativen numerischen Systems, z.B. wird 十二 als 12 im ja_JP-Locale analysiert tm_mon
Woche
U analysiert die Kalenderwoche des Jahres als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich [00,53] ), führende Nullen erlaubt, aber nicht erforderlich tm_year , tm_wday , tm_yday
OU analysiert die Kalenderwoche des Jahres , wie durch %U , unter Verwendung des alternativen Zahlensystems, z.B. wird 五十二 als 52 im ja_JP-Locale analysiert tm_year , tm_wday , tm_yday
W analysiert die Kalenderwoche des Jahres als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich [00,53] ), führende Nullen erlaubt, aber nicht erforderlich tm_year , tm_wday , tm_yday
OW analysiert die Kalenderwoche des Jahres , wie durch %W , unter Verwendung des alternativen Zahlensystems, z.B. wird 五十二 als 52 im ja_JP-Locale analysiert tm_year , tm_wday , tm_yday
Tag des Jahres/Monats
j analysiert den Tag des Jahres als Dezimalzahl (Bereich [001,366] ), führende Nullen erlaubt, aber nicht erforderlich tm_yday
d analysiert den Tag des Monats als Dezimalzahl (Bereich [01,31] ), führende Nullen erlaubt, aber nicht erforderlich tm_mday
Od analysiert den Tag des Monats unter Verwendung des alternativen Zahlensystems, z.B. wird 二十七 als 27 in ja_JP-Locale analysiert, führende Nullen erlaubt aber nicht erforderlich tm_mday
e Synonym von d tm_mday
Oe Synonym von Od tm_mday
Wochentag
a analysiert den Namen des Wochentags, entweder vollständig oder abgekürzt, z.B. Fri tm_wday
A Synonym von a tm_wday
w parst weekday als Dezimalzahl, wobei Sonntag 0 ist (Bereich [0-6] ) tm_wday
Ow parst weekday als Dezimalzahl, wobei Sonntag 0 ist, unter Verwendung des alternativen Zahlensystems, z.B. wird 二 in ja_JP-Lokalisierung als 2 geparst tm_wday
Stunde, Minute, Sekunde
H analysiert die Stunde als Dezimalzahl, 24-Stunden-Format (Bereich [00-23] ), führende Nullen erlaubt, aber nicht erforderlich tm_hour
OH analysiert die Stunde aus der 24-Stunden-Uhr unter Verwendung des alternativen Zahlensystems, z.B. wird 十八 in ja_JP-Lokalisierung als 18 analysiert tm_hour
I interpretiert hour als Dezimalzahl, 12-Stunden-Zählung (Bereich [01,12] ), führende Nullen erlaubt aber nicht erforderlich tm_hour
OI analysiert Stunde aus 12-Stunden-Zeitformat unter Verwendung des alternativen Zahlensystems, z.B. 六 wird als 06 in ja_JP-Locale gelesen tm_hour
M analysiert minute als Dezimalzahl (Bereich [00,59] ), führende Nullen erlaubt aber nicht erforderlich tm_min
OM analysiert minute unter Verwendung des alternativen numerischen Systems, z.B. wird 二十五 als 25 in der ja_JP-Lokalisierung analysiert tm_min
S interpretiert Sekunden als Dezimalzahl (Bereich [00,60] ), führende Nullen erlaubt, aber nicht erforderlich tm_sec
OS analysiert second unter Verwendung des alternativen Zahlensystems, z.B. wird 二十四 als 24 in der ja_JP-Locale analysiert tm_sec
Sonstiges
c analysiert das Standard-Datums- und Zeitformat der Lokalisierung, z.B. Sun Oct 17 04:41:13 2010 (lokalisierungsabhängig) alle
Ec analysiert das alternative Datums- und Zeitformat der Locale, z.B. erwartet 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) in der ja_JP-Locale alle
x analysiert die Standarddatumsdarstellung des Gebietsschemas alle
Ex analysiert die alternative Datumsdarstellung des Gebietsschemas, z.B. erwartet 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Gebietsschema alle
X analysiert die Standard-Zeitdarstellung des Gebietsschemas alle
EX analysiert die alternative Zeitdarstellung des Gebietsschemas alle
D entspricht "%m / %d / %y " tm_mon , tm_mday , tm_year
r analysiert die standardmäßige 12-Stunden-Zeit der Locale (in POSIX, "%I : %M : %S %p" ) tm_hour , tm_min , tm_sec
R entspricht "%H : %M" tm_hour , tm_min
T entspricht "%H : %M : %S" tm_hour , tm_min , tm_sec
p analysiert das lokale Äquivalent von a.m. or p.m. tm_hour

Hinweis: tm_isdst wird nicht geschrieben und muss explizit gesetzt werden für die Verwendung mit Funktionen wie mktime


Rückgabewert

Ein Objekt eines nicht näher spezifizierten Typs, sodass

  • Wenn in ein Objekt vom Typ std:: basic_istream < CharT, Traits > ist, dann hat der Ausdruck in >> get_time ( tmb, fmt )
    • den Typ std:: basic_istream < CharT, Traits > &
    • den Wert in
    • verhält sich, als ob f ( in, tmb, fmt ) aufgerufen würde

wobei die Funktion f definiert ist als:

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, std::tm* tmb, const CharT* fmt)
{
    using Iter = std::istreambuf_iterator<CharT, Traits>;
    using TimeGet = time_get<CharT, Iter>;
    std::ios_base::iostate err = std::ios_base::goodbit;
    const TimeGet& tg = std::use_facet<TimeGet>(str.getloc());
    tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
        fmt, fmt + Traits::length(fmt));
    if (err != std::ios_base::goodbit)
        str.setstate(err);
}

Hinweise

Wie in std::time_get::do_get spezifiziert, welche diese Funktion aufruft, ist es nicht spezifiziert, ob diese Funktion die Felder in * tmb auf Null setzt, die nicht direkt durch die Konvertierungsspezifizierer in fmt gesetzt werden: portable Programme sollten jedes Feld von * tmb vor dem Aufruf von std::get_time auf Null initialisieren.

Beispiel

Hinweis: Wählen Sie clang oder gcc >= 12.1, um die Ausgabe zu beobachten. libstdc++ vor 12.1 implementiert den % b Spezifizierer nicht korrekt: Bug #78714 .

#include <iomanip>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail())
        std::cout << "Parse failed\n";
    else
        std::cout << std::put_time(&t, "%c") << '\n';
}

Mögliche Ausgabe:

Sun Feb 18 23:12:34 2011

Siehe auch

analysiert Zeit-/Datumsangaben aus einer Eingabezeichenfolge in std::tm
(Klassentemplate)
(C++11)
formatiert und gibt einen Zeit-/Datumswert gemäß dem angegebenen Format aus
(Funktionstemplate)
(C++20)
analysiert ein chrono -Objekt aus einem Stream
(Funktionstemplate)