std::get_time
| 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 angibtDie Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern, Leerzeichen und normalen Zeichen (außer
Hinweis:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[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) | |
| (C++11) |
Formatiert und gibt einen Datums-/Zeitwert gemäß dem angegebenen Format aus (Funktion-Template) |
| (C++20) |
parst ein chrono Objekt aus einem Stream(Funktions-Template) |