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.
namespace std {
template<class charT, class OutputIterator = ostreambuf_iterator<charT>>
class time_put : public locale::facet {
public:
using char_type = charT;
using iter_type = OutputIterator;
explicit time_put(size_t refs = 0);
iter_type put(iter_type s, ios_base& f, char_type fill, const tm* tmb,
const charT* pattern, const charT* pat_end) const;
iter_type put(iter_type s, ios_base& f, char_type fill,
const tm* tmb, char format, char modifier = 0) const;
static locale::id id;
protected:
~time_put();
virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t,
char format, char modifier) const;
};
}
iter_type put(iter_type s, ios_base& str, char_type fill, const tm* t,
const charT* pattern, const charT* pat_end) const;
iter_type put(iter_type s, ios_base& str, char_type fill, const tm* t,
char format, char modifier = 0) const;
Effects: The first form steps through the sequence from
pattern
to
pat_end,
identifying characters that are part of a format sequence
. Each character that is not part of a format sequence is written to
s
immediately, and each format sequence, as it is identified, results in
a call to
do_put;
thus, format elements and other characters are interleaved in the output
in the order in which they appear in the pattern
. Format sequences are identified by converting each character
c
to a
char
value as if by
ct.narrow(c, 0),
where
ct
is a reference to
ctype<charT>
obtained from
str.getloc(). The first character of each sequence is equal to
'%',
followed by an optional modifier character
mod and a format specifier character
spec
as defined for the function
strftime. If no modifier character is present,
mod
is zero
. For each valid format sequence identified, calls
do_put(s, str, fill, t, spec, mod).The second form calls
do_put(s, str, fill, t, format, modifier).[
Note: The
fill argument may be used in the implementation-defined
formats or by derivations
. A space character is a reasonable
default for this argument
. —
end note ]
Returns: An iterator pointing immediately after the last character produced
. iter_type do_put(iter_type s, ios_base&, char_type fill, const tm* t,
char format, char modifier) const;
Effects: Formats the contents of the parameter
t
into characters placed on the output sequence
s. Formatting is controlled by the parameters
format and
modifier,
interpreted identically as the format specifiers in the string
argument to the standard library function
strftime(),
except that the sequence of characters produced for those specifiers
that are described as depending on the C locale are instead
implementation-defined
.Returns: An iterator pointing immediately after the last character produced
. [
Note: The
fill argument may be used in the implementation-defined
formats or by derivations
. A space character is a reasonable
default for this argument
. —
end note ]