Namensräume
Varianten
Aktionen

std::chrono::parse

Von cppreference.com
< cpp‎ | chrono
 
 
 
Definiert in Header <chrono>
template< class CharT, class Parsable >
/* nicht spezifiziert */ parse( const CharT* fmt, Parsable& tp );
(1) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,

                         Parsable& tp );
(2) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const CharT* fmt, Parsable& tp,

                         std::basic_string<CharT, Traits, Alloc>& abbrev );
(3) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
                         Parsable& tp,

                         std::basic_string<CharT, Traits, Alloc>& abbrev );
(4) (seit C++20)
template< class CharT, class Parsable >

/* nicht spezifiziert */ parse( const CharT* fmt, Parsable& tp,

                         std::chrono::minutes& offset );
(5) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,

                         Parsable& tp, std::chrono::minutes& offset );
(6) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const CharT* fmt, Parsable& tp,
                         std::basic_string<CharT, Traits, Alloc>& abbrev,

                         std::chrono::minutes& offset );
(7) (seit C++20)
template< class CharT, class Traits, class Alloc, class Parsable >

/* nicht spezifiziert */ parse( const std::basic_string<CharT, Traits, Alloc>& fmt,
                         Parsable& tp,
                         std::basic_string<CharT, Traits, Alloc>& abbrev,

                         std::chrono::minutes& offset );
(8) (seit C++20)

Gibt ein Objekt manip vom nicht spezifizierten Typ zurück, so dass für ein `std::basic_istream`-Objekt is der Ausdruck is >> manip `from_stream` (nicht qualifiziert, um nachschlagetypenbezogenes Suchen zu ermöglichen) wie folgt aufruft:

1) from_stream(is, fmt, tp)
2) from_stream(is, fmt.c_str(), tp)
3) from_stream(is, fmt, tp, std::addressof(abbrev))
4) from_stream(is, fmt.c_str(), tp, std::addressof(abbrev))
5) from_stream(is, fmt, tp,
            static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
6) from_stream(is, fmt.c_str(), tp,
            static_cast<std::basic_string<CharT, Traits, Alloc>*>(nullptr), &offset)
7) from_stream(is, fmt, tp, std::addressof(abbrev), &offset)
8) from_stream(is, fmt.c_str(), tp, std::addressof(abbrev), &offset).

Der Ausdruck is >> manip ist ein L-Wert vom Typ std::basic_istream<CharT, Traits> mit dem Wert is.

Diese Überladungen nehmen nur an der Überladungsauflösung teil, wenn der entsprechende from_stream-Ausdruck wohlgeformt ist.

Implementierungen wird empfohlen, die Verwendung von möglicherweise ungültigen Verweisen auf die Formatzeichenkette zu erschweren, z. B. indem Rückgabetypen nicht verschiebbar gemacht werden und der operator>> L-Werte von Rückgabetypen nicht akzeptiert.

Inhalt

[bearbeiten] Parameter

fmt - eine Formatzeichenkette (siehe unten)
tp - Objekt zur Aufnahme des Parse-Ergebnisses
abbrev - Zeichenkette zur Aufnahme der Zeitzonenabkürzung oder des Namens, die dem Spezifizierer %Z entspricht
offset - Dauer zur Darstellung des Offsets von UTC, die dem Spezifizierer %z entspricht

[bearbeiten] Formatzeichenkette

Die Formatzeichenkette besteht aus null oder mehr Konvertierungsspezifizierern und normalen Zeichen. Jedes normale Zeichen, ausgenommen Leerzeichen und das abschließende Nullzeichen, passt zu einem identischen Zeichen aus dem Eingabestrom oder führt zum Fehlschlagen der Funktion, wenn das nächste Zeichen im Strom nicht gleich ist.

Jedes Leerzeichen passt zu null oder mehr Leerzeichen im Eingabestrom.

Jeder unveränderte Konvertierungsspezifizierer beginnt mit einem %-Zeichen, gefolgt von einem Zeichen, das das Verhalten des Spezifizierers bestimmt. Einige Konvertierungsspezifizierer haben eine modifizierte Form, bei der ein E- oder O-Modifikatorzeichen nach dem %-Zeichen eingefügt wird. Einige Konvertierungsspezifizierer haben eine modifizierte Form, bei der ein Breitenparameter, der als positive Dezimalzahl angegeben ist (nachfolgend als N gezeigt), nach dem %-Zeichen eingefügt wird. Jeder Konvertierungsspezifizierer bewirkt, dass die abgeglichenen Zeichen gemäß der folgenden Tabelle als Teile von Datums- und Zeitdatentypen interpretiert werden.

Eine Zeichensequenz in der Formatzeichenkette, die mit einem % beginnt, aber nicht mit einem der folgenden Konvertierungsspezifizierer übereinstimmt, wird als normales Zeichen interpretiert.

Wenn from_stream nicht alles parsen kann, was durch die Formatzeichenkette spezifiziert ist, oder wenn nicht genügend Informationen zum Parsen einer vollständigen Ergebnisangabe vorhanden sind, oder wenn beim Parsen widersprüchliche Informationen aufgedeckt werden, wird is.setstate(std::ios_base::failbit) aufgerufen.

Die folgenden Konvertierungsspezifizierer sind verfügbar

Konversion
Spezifizierer
Erklärung
%% Passt zu einem literalen %-Zeichen.
%n Passt zu einem Leerzeichen.
%t Passt zu null oder einem Leerzeichen.
Jahr
%C
%NC
%EC
Parst das Jahrhundert als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %EC interpretiert die alternative Darstellung des Jahrhunderts der Locale.

%y
%Ny
%Ey
%Oy
Parst die letzten zwei Dezimalziffern des Jahres. Wenn das Jahrhundert nicht anderweitig angegeben ist (z. B. mit %C), werden Werte im Bereich [69, 99] als Jahre 1969 bis 1999 und Werte im Bereich [00, 68] als Jahre 2000 bis 2068 angenommen. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Die modifizierten Befehle %Ey und %Oy interpretieren die alternative Darstellung der Locale.

%Y
%NY
%EY
Parst das Jahr als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 4. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %EY interpretiert die alternative Darstellung der Locale.

Monat
%b
%B
%h
Parst den vollen oder abgekürzten, nicht Groß-/Kleinschreibung berücksichtigenden Monatsnamen der Locale.
%m
%Nm
%Om
Parst den Monat als Dezimalzahl (Januar ist 1). Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %Om interpretiert die alternative Darstellung der Locale.

Tag
%d
%Nd
%Od
%e
%Ne
%Oe
Parst den Tag des Monats als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Die modifizierten Befehle %Od und %Oe interpretieren die alternative Darstellung der Locale.

Wochentag
%a
%A
Parst den vollen oder abgekürzten, nicht Groß-/Kleinschreibung berücksichtigenden Wochentagsnamen der Locale.
%u
%Nu
Parst den ISO-Wochentag als Dezimalzahl (1-7), wobei Montag 1 ist. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 1. Führende Nullen sind erlaubt, aber nicht erforderlich.
%w
%Nw
%Ow
Parst den Wochentag als Dezimalzahl (0-6), wobei Sonntag 0 ist. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 1. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %Ow interpretiert die alternative Darstellung der Locale.

ISO 8601 wochenbasierendes Jahr

In ISO 8601 beginnen Wochen mit Montag, und die erste Woche des Jahres muss die folgenden Anforderungen erfüllen:

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
%g
%Ng
Parst die letzten zwei Dezimalziffern des ISO 8601 wochenbasierten Jahres. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.
%G
%NG
Parst das ISO 8601 wochenbasierte Jahr als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 4. Führende Nullen sind erlaubt, aber nicht erforderlich.
%V
%NV
Parst die ISO 8601-Kalenderwoche des Jahres als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.
Woche/Tag des Jahres
%j
%Nj
Parst den Tag des Jahres als Dezimalzahl (1. Januar ist 1). Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 3. Führende Nullen sind erlaubt, aber nicht erforderlich.
%U
%NU
%OU
Parst die Wochennummer des Jahres als Dezimalzahl. Der erste Sonntag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres vor diesem sind in Woche 00. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OU interpretiert die alternative Darstellung der Locale.

%W
%NW
%OW
Parst die Wochennummer des Jahres als Dezimalzahl. Der erste Montag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres vor diesem sind in Woche 00. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OW interpretiert die alternative Darstellung der Locale.

Datum
%D Entspricht "%m/%d/%y".
%F
%NF
Entspricht "%Y-%m-%d". Wenn die Breite angegeben ist, wird sie nur auf %Y angewendet.
%x
%Ex
Parst die Datumsdarstellung der Locale.

Der modifizierte Befehl %Ex interpretiert die alternative Datumsdarstellung der Locale.

Tageszeit
%H
%NH
%OH
Parst die Stunde (24-Stunden-Format) als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OH interpretiert die alternative Darstellung der Locale.

%I
%NI
%OI
Parst die Stunde (12-Stunden-Format) als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OI interpretiert die alternative Darstellung der Locale.

%M
%NM
%OM
Parst die Minute als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OM interpretiert die alternative Darstellung der Locale.

%S
%NS
%OS
Parst die Sekunde als Dezimalzahl. Die Breite N gibt die maximale Anzahl der zu lesenden Zeichen an. Die Standardbreite ist 2. Führende Nullen sind erlaubt, aber nicht erforderlich.

Der modifizierte Befehl %OS interpretiert die alternative Darstellung der Locale.

%p Parst die entsprechende AM/PM-Bezeichnung der Locale, die mit einer 12-Stunden-Uhr assoziiert ist.
%R Entspricht "%H:%M".
%T Entspricht "%H:%M:%S".
%r Parst die 12-Stunden-Uhrzeit der Locale.
%X
%EX
Parst die Zeitdarstellung der Locale.

Der modifizierte Befehl %EX interpretiert die alternative Zeitdarstellung der Locale.

Sonstiges
%c
%Ec
Parst die Datums- und Zeitdarstellung der Locale.

Der modifizierte Befehl %Ec interpretiert die alternative Datums- und Zeitdarstellung der Locale.

%z
%Ez
%Oz
Parst den Offset von UTC im Format [+|-]hh[mm]. Zum Beispiel bezieht sich -0430 auf 4 Stunden und 30 Minuten hinter UTC, und 04 bezieht sich auf 4 Stunden vor UTC.

Die modifizierten Befehle %Ez und %Oz parsen das Format [+|-]h[h][:mm] (d. h., sie erfordern einen : zwischen Stunden und Minuten und machen die führende Null für Stunden optional).

%Z Parst die Zeitzonenabkürzung oder den Zeitzonennamen, genommen als die längste Sequenz von Zeichen, die nur die Zeichen A bis Z, a bis z, 0 bis 9, -, +, _ und / enthält.

[bearbeiten] Beispiel

#include <chrono>
#include <iostream>
#include <locale>
#include <sstream>
 
int main()
{
    auto parse = [&](auto str, auto fmt, auto o)
    {
        std::istringstream is{str};
        is.imbue(std::locale("en_US.utf-8"));
        is >> std::chrono::parse(fmt, o);
        is.fail() ? std::cout << "Parse failed!\n" : std::cout << o << '\n';
    };
    parse("01:02:03", "%H:%M:%S", std::chrono::hours{});
    parse("01:02:03", "%H:%M:%S", std::chrono::minutes{});
    parse("01:02:03", "%H:%M:%S", std::chrono::seconds{});
}

Mögliche Ausgabe

1h
62min
3723s

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3554 C++20 Überladungen für einfache, nullterminierte Zeichenketten fehlten hinzugefügt

[bearbeiten] Siehe auch

liest einen sys_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
liest einen utc_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
liest einen tai_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
liest einen gps_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
liest einen file_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
liest einen local_time aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [edit]
parst ein year aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst einen month aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst einen day aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst einen weekday aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst einen month_day aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst ein year_month aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
parst ein year_month_day aus einem Stream gemäß dem angegebenen Format
(Funktionstemplate) [bearbeiten]
(C++11)
Parst einen Datums-/Zeitwert nach dem angegebenen Format
(Funktion-Template) [bearbeiten]