| Localization library | |||||||||||||||||||||||||
| Regular expressions library(C++11) | |||||||||||||||||||||||||
| Formatting library(C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
time_get::gettime_get::do_get |
Defined in header <locale> | ||
public: iter_type get( iter_type beg, iter_type end,std::ios_base& str, | (1) | (since C++11) |
protected: virtual iter_type do_get( iter_type beg, iter_type end,std::ios_base& str, | (2) | (since C++11) |
do_get. Theget function performs the following:First, clears the error bits inerr by executingerr=std::ios_base::goodbit. Then enters a loop, which terminates whenever any of the following conditions becomes true (checked in this order):eofbit andfailbit inerr.% and the format character, if present). If there is no modifier, the value'\0' is used. If the format string is ambiguous or ends too early to determine the conversion specifier after'%',eofbit is set inerr and the loop is terminated. If, after the call todo_get, no error bits are set inerr, the function incrementsfmtbeg to point right after the conversion specifier and continues the loop.failbit inerr.failbit inerr. If the end of the input stream is reached after reading a character, setseofbit inerr. If the input string was parsed successfully, updates the corresponding fields of*t.eofbit inerr and leaves these fields in unspecified state.Contents |
| beg | - | iterator designating the start of the sequence to parse |
| end | - | one past the end iterator for the sequence to parse |
| str | - | a stream object that this function uses to obtain locale facets when needed, e.g.std::ctype to skip whitespace orstd::collate to compare strings |
| err | - | stream error flags object that is modified by this function to indicate errors |
| t | - | pointer to thestd::tm object that will hold the result of this function call |
| fmtbeg | - | pointer to the first character of a sequence ofchar_type characters specifying the conversion format (see below) |
| fmtend | - | pointer one past the last character of a sequence ofchar_type characters specifying the conversion format |
| format | - | the character that names a conversion specifier |
| modifier | - | the optional modifier that may appear between% and the conversion specifier |
The format string consists of zero or more conversion specifiers, whitespace characters, and ordinary characters (except%). Each ordinary character is expected to match one character in the input stream in case-insensitive comparison. Each whitespace character matches arbitrary whitespace in the input string. Each conversion specification begins with% character, optionally followed byE orO modifier (ignored if unsupported by the locale), followed by the character that determines the behavior of the specifier. The format specifiers match the POSIX functionstrptime():
| Conversion specifier | Explanation | Writes to fields |
|---|---|---|
% | matches a literal%. The full conversion specification must be%% | (none) |
t | matches any whitespace | (none) |
n | matches any whitespace | (none) |
| Year | ||
Y | parses fullyear as a 4 digit decimal number, leading zeroes permitted but not required | tm_year |
EY | parsesyear in the alternative representation, e.g.平成23年 (year Heisei 23) which writes 2011 to tm_year in ja_JP locale | tm_year |
y | parses last 2 digits ofyear as a decimal number. Range[69,99] results in values 1969 to 1999, range[00,68] results in 2000-2068 | tm_year |
Oy | parses last 2 digits ofyear using the alternative numeric system, e.g. 十一 is parsed as 11 in ja_JP locale | tm_year |
Ey | parsesyear as offset from locale's alternative calendar period%EC | tm_year |
C | parses the first 2 digits ofyear as a decimal number (range[00,99]) | tm_year |
EC | parses the name of the base year (period) in the locale's alternative representation, e.g. 平成 (Heisei era) in ja_JP | tm_year |
| Month | ||
b | parses the month name, either full or abbreviated, e.g.Oct | tm_mon |
h | synonym ofb | tm_mon |
B | synonym ofb | tm_mon |
m | parses themonth as a decimal number (range[01,12]), leading zeroes permitted but not required | tm_mon |
Om | parses themonth using the alternative numeric system, e.g. 十二 parses as 12 in ja_JP locale | tm_mon |
| Week | ||
U | parses theweek of the year as a decimal number (Sunday is the first day of the week) (range[00,53]), leading zeroes permitted but not required | tm_year,tm_wday,tm_yday |
OU | parses theweek of the year, as by%U, using the alternative numeric system, e.g. 五十二 parses as 52 in ja_JP locale | tm_year,tm_wday,tm_yday |
W | parses theweek of the year as a decimal number (Monday is the first day of the week) (range[00,53]), leading zeroes permitted but not required | tm_year,tm_wday,tm_yday |
OW | parses theweek of the year, as by%W, using the alternative numeric system, e.g. 五十二 parses as 52 in ja_JP locale | tm_year,tm_wday,tm_yday |
| Day of the year/month | ||
j | parsesday of the year as a decimal number (range[001,366]), leading zeroes permitted but not required | tm_yday |
d | parses theday of the month as a decimal number (range[01,31]), leading zeroes permitted but not required | tm_mday |
Od | parses theday of the month using the alternative numeric system, e.g. 二十七 parses as 27 in ja_JP locale, leading zeroes permitted but not required | tm_mday |
e | synonym ofd | tm_mday |
Oe | synonym ofOd | tm_mday |
| Day of the week | ||
a | parses the name of the day of the week, either full or abbreviated, e.g.Fri | tm_wday |
A | synonym ofa | tm_wday |
w | parsesweekday as a decimal number, where Sunday is0 (range[0-6]) | tm_wday |
Ow | parsesweekday as a decimal number, where Sunday is0, using the alternative numeric system, e.g. 二 parses as 2 in ja_JP locale | tm_wday |
| Hour, minute, second | ||
H | parses thehour as a decimal number, 24 hour clock (range[00-23]), leading zeroes permitted but not required | tm_hour |
OH | parseshour from 24-hour clock using the alternative numeric system, e.g. 十八 parses as 18 in ja_JP locale | tm_hour |
I | parseshour as a decimal number, 12 hour clock (range[01,12]), leading zeroes permitted but not required | tm_hour |
OI | parseshour from 12-hour clock using the alternative numeric system, e.g. 六 reads as 06 in ja_JP locale | tm_hour |
M | parsesminute as a decimal number (range[00,59]), leading zeroes permitted but not required | tm_min |
OM | parsesminute using the alternative numeric system, e.g. 二十五 parses as 25 in ja_JP locale | tm_min |
S | parsessecond as a decimal number (range[00,60]), leading zeroes permitted but not required | tm_sec |
OS | parsessecond using the alternative numeric system, e.g. 二十四 parses as 24 in ja_JP locale | tm_sec |
| Other | ||
c | parses the locale's standard date and time string format, e.g.Sun Oct 17 04:41:13 2010 (locale dependent) | all |
Ec | parses the locale's alternative date and time string format, e.g. expecting 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale | all |
x | parses the locale's standard date representation | all |
Ex | parses the locale's alternative date representation, e.g. expecting 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale | all |
X | parses the locale's standard time representation | all |
EX | parses the locale's alternative time representation | all |
D | equivalent to"%m / %d / %y " | tm_mon,tm_mday,tm_year |
r | parses locale's standard 12-hour clock time (in POSIX,"%I : %M : %S %p") | tm_hour,tm_min,tm_sec |
R | equivalent to"%H : %M" | tm_hour,tm_min |
T | equivalent to"%H : %M : %S" | tm_hour,tm_min,tm_sec |
p | parses the locale's equivalent ofa.m. or p.m. | tm_hour |
Note:tm_isdst is not written to, and needs to be set explicitly for use with functions such asmktime
Iterator pointing one past the last character in[beg, end) that was parsed successfully.
The case-insensitive comparison for the non-whitespace non-'%' characters in the format string, thestd::collate facet of the locale provided bystr is typically, but not necessarily, used.
If a parsing error is encountered, many implementations of this function leave*t completely untouched.
It's unspecified if these functions zero out the fields in*t that they do not set directly: portable programs should initialize every field to zero before callingget().
#include <iomanip>#include <iostream>#include <locale>#include <sstream> int main(){std::istringstream ss("2026-März-12 23:45:56"); ss.imbue(std::locale("de_DE.utf8")); auto& f=std::use_facet<std::time_get<char>>(ss.getloc());std::tm t{};std::string s="%Y-%b-%d %H:%M:%S";std::ios_base::iostate err=std::ios_base::goodbit;auto ret= f.get({ss},{}, ss, err,&t,&s[0],&s[0]+ s.size()); ss.setstate(err);std::istreambuf_iterator<char> last{}; if(ss){std::cout<<"Successfully parsed as "<<std::put_time(&t,"%c")<<'\n';if(ret!= last){std::cout<<"Remaining content: ";std::copy(ret, last,std::ostreambuf_iterator<char>(std::cout));}elsestd::cout<<"The input was fully consumed.";}else{std::cout<<"Parse failed.\nUnparsed string: ";std::copy(ret, last,std::ostreambuf_iterator<char>(std::cout));}std::cout<<'\n';}
Output:
Successfully parsed as Sun Mar 12 23:45:56 2026The input was fully consumed.
(C++11) | parses a date/time value of specified format (function template)[edit] |