namespace std {
class time_base {
public:
enum dateorder { no_order, dmy, mdy, ymd, ydm };
};
template<class charT, class InputIterator = istreambuf_iterator<charT>>
class time_get : public locale::facet, public time_base {
public:
using char_type = charT;
using iter_type = InputIterator;
explicit time_get(size_t refs = 0);
dateorder date_order() const { return do_date_order(); }
iter_type get_time(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t) const;
iter_type get_date(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t) const;
iter_type get_weekday(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t) const;
iter_type get_monthname(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t) const;
iter_type get_year(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t) const;
iter_type get(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t, char format, char modifier = 0) const;
iter_type get(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t, const char_type* fmt,
const char_type* fmtend) const;
static locale::id id;
protected:
~time_get();
virtual dateorder do_date_order() const;
virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&,
ios_base::iostate& err, tm* t) const;
virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&,
ios_base::iostate& err, tm* t) const;
virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&,
ios_base::iostate& err, tm* t) const;
virtual iter_type do_get_monthname(iter_type s, iter_type end, ios_base&,
ios_base::iostate& err, tm* t) const;
virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&,
ios_base::iostate& err, tm* t) const;
virtual iter_type do_get(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t, char format, char modifier) const;
};
}
time_get
is used to
parse a character sequence, extracting components of a time or date
into a
struct tm
object
. Each
get
member parses a format as produced by a corresponding format specifier to
time_put<>::put. If the sequence being parsed matches the correct format, the corresponding
members of the
struct tm
argument are set to the values used to produce the sequence; otherwise
either an error is reported or unspecified values are assigned
.If the end iterator is reached during parsing by any of the
get()
member functions, the member sets
ios_base::eofbit
in
err.dateorder date_order() const;
Returns:
do_date_order(). iter_type get_time(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Returns:
do_get_time(s, end, str, err, t). iter_type get_date(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Returns:
do_get_date(s, end, str, err, t). iter_type get_weekday(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
iter_type get_monthname(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Returns:
do_get_weekday(s, end, str, err, t)
or
do_get_monthname(s, end, str, err, t). iter_type get_year(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Returns:
do_get_year(s, end, str, err, t). iter_type get(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err,
tm* t, char format, char modifier = 0) const;
Returns:
do_get(s, end, f, err, t, format, modifier). iter_type get(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err,
tm* t, const char_type* fmt, const char_type* fmtend) const;
Preconditions:
[fmt, fmtend) is a valid range
. Effects:
The function starts by evaluating
err = ios_base::goodbit. It then enters a loop, reading zero or more
characters from
s at each iteration
. Unless otherwise specified below,
the loop terminates when the first of the following conditions holds:
The expression
fmt == fmtend evaluates to
true.The expression
err == ios_base::goodbit evaluates to
false.The expression
s == end evaluates to
true,
in which case the function
evaluates
err = ios_base::eofbit | ios_base::failbit.The next element of
fmt is equal to
'%', optionally followed by a
modifier character, followed by a conversion specifier character,
format, together forming a conversion specification valid for the
ISO/IEC 9945 function
strptime. If the number of elements in the range
[fmt, fmtend) is not sufficient to unambiguously determine whether the
conversion specification is complete and valid, the function evaluates
err = ios_base::failbit. Otherwise, the function evaluates
s = do_get(s, end, f, err, t, format, modifier), where the value
of
modifier is
'\0'
when the optional modifier is absent from the conversion specification
. If
err == ios_base::goodbit holds after the evaluation of the
expression, the function increments
fmt to point just past the end of
the conversion specification and continues looping
.The expression
isspace(*fmt, f.getloc()) evaluates to
true,
in which case
the function first increments
fmt until
fmt == fmtend || !isspace(*fmt, f.getloc()) evaluates to
true,
then advances
s until
s == end || !isspace(*s, f.getloc()) is
true, and finally resumes looping
.The next character read from
s matches the element
pointed to by
fmt in
a case-insensitive comparison, in which case the function evaluates
++fmt, ++s and continues looping
. Otherwise, the function evaluates
err = ios_base::failbit.
[
Note: The function uses the
ctype<charT>
facet installed in
f's locale
to determine valid whitespace characters
. It is unspecified by what
means the function performs case-insensitive comparison or whether
multi-character sequences are considered while doing so
. —
end note ]
dateorder do_date_order() const;
Returns:
An enumeration value indicating the preferred order of components for
those date formats that are composed of day, month, and year
.
Returns
no_order
if the date format specified by
'x'
contains other variable components (e.g., Julian day, week number, week day)
.iter_type do_get_time(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Effects:
Reads characters starting at
s
until it has extracted those
struct tm
members, and remaining format characters, used by
time_put<>::put
to produce the format specified by
"%H:%M:%S",
or until it encounters an error or end of sequence
. Returns:
An iterator pointing immediately beyond the last character recognized
as possibly part of a valid time
. iter_type do_get_date(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Effects:
Reads characters starting at
s
until it has extracted those
struct tm
members and remaining format characters used by
time_put<>::put
to produce one of the following formats,
or until it encounters an error
. The format depends on the value returned
by
date_order() as shown in
Table
113.Table
113:
do_get_date effects [tab:locale.time.get.dogetdate]
date_order() | Format |
no_order | "%m%d%y" |
dmy | "%d%m%y" |
mdy | "%m%d%y" |
ymd | "%y%m%d" |
ydm | "%y%d%m" |
An implementation may also accept additional
implementation-defined formats
.Returns:
An iterator pointing immediately beyond the last character recognized
as possibly part of a valid date
. iter_type do_get_weekday(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
iter_type do_get_monthname(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Effects:
Reads characters starting at
s
until it has extracted the (perhaps abbreviated) name of a weekday or month
. If it finds an abbreviation that is followed by characters that could
match a full name, it continues reading until it matches the full name or
fails
. It sets the appropriate
struct tm
member accordingly
.Returns:
An iterator pointing immediately beyond the last character recognized
as part of a valid name
. iter_type do_get_year(iter_type s, iter_type end, ios_base& str,
ios_base::iostate& err, tm* t) const;
Effects:
Reads characters starting at
s
until it has extracted an unambiguous year identifier
. It is
implementation-defined whether
two-digit year numbers are accepted,
and (if so) what century they are assumed to lie in
. Sets the
t->tm_year
member accordingly
.Returns:
An iterator pointing immediately beyond the last character recognized
as part of a valid year identifier
. iter_type do_get(iter_type s, iter_type end, ios_base& f,
ios_base::iostate& err, tm* t, char format, char modifier) const;
Preconditions:
t points to an object
. Effects:
The function starts by evaluating
err = ios_base::goodbit. It
then reads characters starting at
s until it encounters an error, or
until it has extracted and assigned those
struct tm members, and any
remaining format characters, corresponding to a conversion directive
appropriate for the ISO/IEC 9945 function
strptime, formed by
concatenating
'%', the
modifier character,
when non-NUL, and the
format
character
. When the concatenation fails to yield a complete valid
directive the function leaves the object pointed to by
t unchanged and
evaluates
err |= ios_base::failbit. When
s == end
evaluates to
true after reading a character the function evaluates
err |= ios_base::eofbit.For complex conversion directives such as
%c,
%x, or
%X, or directives
that involve the optional modifiers
E or
O,
when the function is unable
to unambiguously determine some or all
struct tm members from the input
sequence
[s, end), it evaluates
err |= ios_base::eofbit. In such cases the values of those
struct tm members are unspecified
and may be outside their valid range
.Remarks:
It is unspecified whether multiple calls to
do_get() with the
address of the same
struct tm object will update the current contents of
the object or simply overwrite its members
. Portable programs should zero
out the object before invoking the function
.Returns:
An iterator pointing immediately beyond the last character
recognized as possibly part of a valid input sequence for the given
format and
modifier.