39int main (
int argc,
char *argv[])
42 std::tm
t = std::tm ();
66 {
"%a",
"abbreviated weekday name" },
67 {
"%A",
"full weekday name" },
68 {
"%b",
"abbreviated month name" },
69 {
"%B",
"full month name" },
70 {
"%c",
"date and time" },
71 {
"%C",
"two-digit year [00,99]" },
72 {
"%d",
"month number [01,31]" },
73 {
"%D",
"date as \"%m/%d/%y\"" },
74 {
"%e",
"month number [ 1,31]" },
75 {
"%F",
"date as \"%Y-%m-%d\"" },
76 {
"%g",
"week-based year [00,99]" },
77 {
"%G",
"week-based year" },
78 {
"%h",
"same as \"%b\"" },
79 {
"%H",
"hour [00-23]" },
80 {
"%I",
"hour [01-12]" },
81 {
"%j",
"day of the year [001,366]" },
82 {
"%k",
"hour [ 0,23]" },
83 {
"%l",
"hour [ 1,12]" },
84 {
"%m",
"month number [01,12]" },
85 {
"%M",
"minute [00,59]" },
86 {
"%n",
"newline character" },
87 {
"%p",
"a.m. or p.m. equivalent" },
88 {
"%r",
"AM/PM time" },
89 {
"%R",
"24-hour time" },
90 {
"%S",
"second [00,60]" },
91 {
"%t",
"tab character" },
92 {
"%T",
"time as \"%H:%M:%S\"" },
93 {
"%u",
"Monday-based weekday [1,7]" },
94 {
"%U",
"week number [00,53]" },
95 {
"%V",
"week numver [01,53]" },
96 {
"%w",
"weekday [0,6]" },
97 {
"%W",
"week number [00,53]" },
100 {
"%y",
"two-digit year [00,99]" },
102 {
"%z",
"offset from UTC" },
103 {
"%Z",
"time zone" },
104 {
"%%",
"percent character" },
131 std::cout.imbue (std::locale (argv [1]));
135 std::cerr << ex.what () <<
'\n';
141 const std::time_put<char> &tput =
142 std::use_facet<std::time_put<char> >(std::cout.getloc ());
145 std::cout.setf (std::cout.
left);
149 for (std::size_t
i = 0;
i !=
sizeof fmt /
sizeof *fmt; ++
i) {
151 const char*
const spec = fmt [
i].spec;
153 std::ostringstream
tmp;
156 tmp <<
'"' << spec <<
'"';
161 std::cout <<
tmp.str ();
169 else if (
't' == spec [1])
172 tput.put (std::ostreambuf_iterator<char>(
tmp.rdbuf ()),
173 std::cout,
'\0', &
t, spec,
174 spec + std::char_traits<char>::length (spec));
179 std::cout.width (32);
180 std::cout <<
tmp.str ();
185 const char*
const d = spec + 1 + (
'E' == *spec ||
'O' == *spec);
187 if (
'c' == *
d ||
'r' == *
d ||
'x' == *
d ||
'X' == *
d) {
191 tmp << fmt [
i].desc <<
" (";
199 tput.put (std::ostreambuf_iterator<char>(
tmp.rdbuf ()),
200 std::cout,
'\0', 0, spec,
201 spec + std::char_traits<char>::length (spec));
208 else if (*fmt [
i].desc) {
213 std::cout <<
tmp.str () <<
'\n';