Namensräume
Varianten
Aktionen

std::get_time

Von cppreference.com
< cpp‎ | io‎ | manip
 
 
 
Input/output-Manipulatoren
Formatierung von Gleitkommazahlen
Ganzzahlformatierung
Boolean-Formatierung
Feldbreiten- und Füllzeichensteuerung
Andere Formatierungen
Leerzeichenverarbeitung
Ausgabe-Flushen
(C++20)  

Statusflags-Manipulation
Zeit- und Geld-I/O
(C++11)
get_time
(C++11)
(C++11)
(C++11)
Gequoteter Manipulator
(C++14)
 
Definiert im Header <iomanip>
template< class CharT >
/*unspecified*/ get_time( std::tm* tmb, const CharT* fmt );
(seit C++11)

Wenn in einem Ausdruck in >> get_time(tmb, fmt) verwendet, parst er die Zeicheneingabe als Datums-/Zeitwert gemäß der Formatzeichenfolge fmt gemäß der std::time_get-Facette der aktuell im Eingabestrom in eingebetteten Locale. Der resultierende Wert wird in einem std::tm-Objekt gespeichert, auf das von tmb gezeigt wird.

Inhalt

[edit] Parameter

tmb - gültiger Zeiger auf das std::tm-Objekt, in dem das Ergebnis gespeichert wird
fmt - Zeiger auf eine nullterminierte CharT-Zeichenfolge, die das Konvertierungsformat angibt

Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern, Leerzeichen und normalen Zeichen (außer %). Jedes normale Zeichen muss einem Zeichen im Eingabestrom bei der Groß-/Kleinschreibung ignorierenden Übereinstimmung entsprechen. Jedes Leerzeichen entspricht beliebigen Leerzeichen in der Eingabezeichenfolge. Jede Konvertierungsspezifikation beginnt mit einem %-Zeichen, optional gefolgt von einem E- oder O-Modifikator (ignoriert, wenn von der Locale nicht unterstützt), gefolgt von dem Zeichen, das das Verhalten des Spezifizierers bestimmt. Die Formatspezifizierer entsprechen der POSIX-Funktion strptime()

Konversion
Spezifizierer
Erklärung Schreibt in Felder
% entspricht einem literalen %. Die vollständige Konvertierungsspezifikation muss %% sein (keine)
t entspricht einem beliebigen Leerzeichen (keine)
n entspricht einem beliebigen Leerzeichen (keine)
Jahr
Y parst das vollständige Jahr als 4-stellige Dezimalzahl, führende Nullen sind erlaubt, aber nicht erforderlich tm_year
EY parst das Jahr in der alternativen Darstellung, z.B. 平成23年 (Jahr Heisei 23), was 2011 in tm_year in der ja_JP Locale schreibt tm_year
y parst die letzten 2 Ziffern des Jahres als Dezimalzahl. Der Bereich [69,99] ergibt die Werte 1969 bis 1999, der Bereich [00,68] ergibt 2000-2068 tm_year
Oy parst die letzten 2 Ziffern des Jahres unter Verwendung des alternativen Zahlensystems, z.B. 十一 wird in der ja_JP Locale als 11 geparst tm_year
Ey parst das Jahr als Offset vom alternativen Kalenderzeitraum der Locale %EC tm_year
C parst die ersten 2 Ziffern des Jahres als Dezimalzahl (Bereich [00,99]) tm_year
EC parst den Namen des Basisjahres (Zeitraums) in der alternativen Darstellung der Locale, z.B. 平成 (Heisei-Ära) in ja_JP tm_year
Monat
b parst 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 parst den Monat als Dezimalzahl (Bereich [01,12]), führende Nullen sind erlaubt, aber nicht erforderlich tm_mon
Om parst den Monat unter Verwendung des alternativen Zahlensystems, z.B. 十二 wird in der ja_JP Locale als 12 geparst tm_mon
Week
U parst die Kalenderwoche als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich [00,53]), führende Nullen sind erlaubt, aber nicht erforderlich tm_year, tm_wday, tm_yday
OU parst die Kalenderwoche, wie mit %U, unter Verwendung des alternativen Zahlensystems, z.B. 五十二 wird in der ja_JP Locale als 52 geparst tm_year, tm_wday, tm_yday
W parst die Kalenderwoche als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich [00,53]), führende Nullen sind erlaubt, aber nicht erforderlich tm_year, tm_wday, tm_yday
OW parst die Kalenderwoche, wie mit %W, unter Verwendung des alternativen Zahlensystems, z.B. 五十二 wird in der ja_JP Locale als 52 geparst tm_year, tm_wday, tm_yday
Tag des Jahres/Monats
j parst den Tag des Jahres als Dezimalzahl (Bereich [001,366]), führende Nullen sind erlaubt, aber nicht erforderlich tm_yday
d parst den Tag des Monats als Dezimalzahl (Bereich [01,31]), führende Nullen sind erlaubt, aber nicht erforderlich tm_mday
Od parst den Tag des Monats unter Verwendung des alternativen Zahlensystems, z.B. 二十七 wird in der ja_JP Locale als 27 geparst, führende Nullen sind erlaubt, aber nicht erforderlich tm_mday
e Synonym von d tm_mday
Oe Synonym von Od tm_mday
Wochentag
a parst den Namen des Wochentags, entweder vollständig oder abgekürzt, z.B. Fri tm_wday
A Synonym von a tm_wday
w parst den Wochentag als Dezimalzahl, wobei Sonntag 0 ist (Bereich [0-6]) tm_wday
Ow parst den Wochentag als Dezimalzahl, wobei Sonntag 0 ist, unter Verwendung des alternativen Zahlensystems, z.B. 二 wird in der ja_JP Locale als 2 geparst tm_wday
Stunde, Minute, Sekunde
H parst die Stunde als Dezimalzahl, 24-Stunden-Uhr (Bereich [00-23]), führende Nullen sind erlaubt, aber nicht erforderlich tm_hour
OH parst die Stunde aus der 24-Stunden-Uhr unter Verwendung des alternativen Zahlensystems, z.B. 十八 wird in der ja_JP Locale als 18 geparst tm_hour
I parst die Stunde als Dezimalzahl, 12-Stunden-Uhr (Bereich [01,12]), führende Nullen sind erlaubt, aber nicht erforderlich tm_hour
OI parst die Stunde aus der 12-Stunden-Uhr unter Verwendung des alternativen Zahlensystems, z.B. 六 wird in der ja_JP Locale als 06 gelesen tm_hour
M parst die Minute als Dezimalzahl (Bereich [00,59]), führende Nullen sind erlaubt, aber nicht erforderlich tm_min
OM parst die Minute unter Verwendung des alternativen Zahlensystems, z.B. 二十五 wird in der ja_JP Locale als 25 geparst tm_min
S parst die Sekunde als Dezimalzahl (Bereich [00,60]), führende Nullen sind erlaubt, aber nicht erforderlich tm_sec
OS parst die Sekunde unter Verwendung des alternativen Zahlensystems, z.B. 二十四 wird in der ja_JP Locale als 24 geparst tm_sec
Sonstiges
c parst den Datums- und Zeitstring des Standardformats der Locale, z.B. Sun Oct 17 04:41:13 2010 (locale-abhängig) all
Ec parst den alternativen Datums- und Zeitstring der Locale, z.B. erwartet 平成23年 (Jahr Heisei 23) anstelle von 2011年 (Jahr 2011) in der ja_JP Locale all
x parst die Standard-Datumsdarstellung der Locale all
Ex parst die alternative Datumsdarstellung der Locale, z.B. erwartet 平成23年 (Jahr Heisei 23) anstelle von 2011年 (Jahr 2011) in der ja_JP Locale all
X parst die Standard-Zeitsdarstellung der Locale all
EX parst die alternative Zeitdarstellung der Locale all
D entspricht "%m / %d / %y " tm_mon, tm_mday, tm_year
r parst die Standard-12-Stunden-Uhrzeit 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 parst das Locale-Äquivalent von a.m. oder p.m. tm_hour

Hinweis: tm_isdst wird nicht geschrieben und muss explizit gesetzt werden, wenn Funktionen wie mktime verwendet werden


[edit] Rückgabewert

Ein Objekt eines nicht spezifizierten Typs, so dass

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

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);
}

[edit] Hinweise

Wie in std::time_get::do_get spezifiziert, die diese Funktion aufruft, ist es nicht spezifiziert, ob diese Funktion die Felder in *tmb auf null setzt, die nicht direkt von den Konvertierungsspezifizierern in fmt gesetzt werden: portierbare Programme sollten jedes Feld von *tmb auf null initialisieren, bevor std::get_time aufgerufen wird.

[edit] Beispiel

Hinweis: Wählen Sie clang oder gcc >= 12.1, um die Ausgabe zu beobachten. libstdc++ vor 12.1 implementiert den Spezifizierer %b 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

[edit] Siehe auch

analysiert Zeit-/Datumsangaben aus einer Eingabezeichensequenz in std::tm
(Klassentemplate) [bearbeiten]
(C++11)
Formatiert und gibt einen Datums-/Zeitwert gemäß dem angegebenen Format aus
(Funktion-Template) [bearbeiten]
(C++20)
parst ein chrono Objekt aus einem Stream
(Funktions-Template) [bearbeiten]