first commit
This commit is contained in:
217
extern/stdcxx/4.2.1/examples/manual/time_put.cpp
vendored
Normal file
217
extern/stdcxx/4.2.1/examples/manual/time_put.cpp
vendored
Normal file
@@ -0,0 +1,217 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* time_put.cpp - Example program for the std::time_put facet.
|
||||
*
|
||||
* $Id: time_put.cpp 515674 2007-03-07 18:12:24Z sebor $
|
||||
*
|
||||
***************************************************************************
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed
|
||||
* with this work for additional information regarding copyright
|
||||
* ownership. The ASF licenses this file to you under the Apache
|
||||
* License, Version 2.0 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*
|
||||
* Copyright 1998-2006 Rogue Wave Software.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
// NOTE: due to a SunPro bug, <ctime> must preceed <locale> (see PR #26255)
|
||||
#include <ctime> // for struct tm
|
||||
#include <exception> // for exception
|
||||
#include <iostream> // for cout, endl
|
||||
#include <locale> // for locale, time_put
|
||||
#include <sstream> // for ostringstream
|
||||
|
||||
#include <examples.h>
|
||||
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
// zero-out all members (including any non-standard ones)
|
||||
std::tm t = std::tm ();
|
||||
|
||||
// assign individual members, being careful to avoid relying
|
||||
// on the implementation-defined layout of the struct
|
||||
t.tm_sec = 56; // seconds
|
||||
t.tm_min = 34; // minutes
|
||||
t.tm_hour = 14; // hours (i.e., 2 PM)
|
||||
t.tm_mday = 3; // day of month
|
||||
t.tm_mon = 1; // month (February)
|
||||
t.tm_year = 84; // years since 1900 (i.e., 1984)
|
||||
t.tm_yday = 33; // day of the year
|
||||
t.tm_wday = 5; // Sunday-based weekday (Friday)
|
||||
t.tm_isdst = 0; // Daylight Saving Time
|
||||
|
||||
// array of all supported conversion specifiers
|
||||
static const struct {
|
||||
// const below commented out to avoid compiler warnings
|
||||
// such as HP aCC's Warning 578: A class member may not
|
||||
// be a const array since there is no way to initialize
|
||||
// such a member.
|
||||
/* const */ char spec [4]; // specifier
|
||||
/* const */ char desc [40]; // description
|
||||
} fmt[] = {
|
||||
// plain (unmodified) conversion specifiers
|
||||
{ "%a", "abbreviated weekday name" },
|
||||
{ "%A", "full weekday name" },
|
||||
{ "%b", "abbreviated month name" },
|
||||
{ "%B", "full month name" },
|
||||
{ "%c", "date and time" },
|
||||
{ "%C", "two-digit year [00,99]" },
|
||||
{ "%d", "month number [01,31]" },
|
||||
{ "%D", "date as \"%m/%d/%y\"" },
|
||||
{ "%e", "month number [ 1,31]" },
|
||||
{ "%F", "date as \"%Y-%m-%d\"" },
|
||||
{ "%g", "week-based year [00,99]" },
|
||||
{ "%G", "week-based year" },
|
||||
{ "%h", "same as \"%b\"" },
|
||||
{ "%H", "hour [00-23]" },
|
||||
{ "%I", "hour [01-12]" },
|
||||
{ "%j", "day of the year [001,366]" },
|
||||
{ "%k", "hour [ 0,23]" },
|
||||
{ "%l", "hour [ 1,12]" },
|
||||
{ "%m", "month number [01,12]" },
|
||||
{ "%M", "minute [00,59]" },
|
||||
{ "%n", "newline character" },
|
||||
{ "%p", "a.m. or p.m. equivalent" },
|
||||
{ "%r", "AM/PM time" },
|
||||
{ "%R", "24-hour time" },
|
||||
{ "%S", "second [00,60]" },
|
||||
{ "%t", "tab character" },
|
||||
{ "%T", "time as \"%H:%M:%S\"" },
|
||||
{ "%u", "Monday-based weekday [1,7]" },
|
||||
{ "%U", "week number [00,53]" },
|
||||
{ "%V", "week numver [01,53]" },
|
||||
{ "%w", "weekday [0,6]" },
|
||||
{ "%W", "week number [00,53]" },
|
||||
{ "%x", "date" },
|
||||
{ "%X", "time" },
|
||||
{ "%y", "two-digit year [00,99]" },
|
||||
{ "%Y", "year" },
|
||||
{ "%z", "offset from UTC" },
|
||||
{ "%Z", "time zone" },
|
||||
{ "%%", "percent character" },
|
||||
|
||||
// modified conversion specifiers
|
||||
{ "%Ec", "" },
|
||||
{ "%EC", "" },
|
||||
{ "%Ex", "" },
|
||||
{ "%EX", "" },
|
||||
{ "%Ey", "" },
|
||||
{ "%EY", "" },
|
||||
{ "%Od", "" },
|
||||
{ "%Oe", "" },
|
||||
{ "%OH", "" },
|
||||
{ "%OI", "" },
|
||||
{ "%Om", "" },
|
||||
{ "%OM", "" },
|
||||
{ "%OS", "" },
|
||||
{ "%Ou", "" },
|
||||
{ "%OU", "" },
|
||||
{ "%OV", "" },
|
||||
{ "%Ow", "" },
|
||||
{ "%OW", "" },
|
||||
{ "%Oy", "" }
|
||||
};
|
||||
|
||||
if (1 < argc) {
|
||||
try {
|
||||
// imbue the locale specified by the argument in cout
|
||||
std::cout.imbue (std::locale (argv [1]));
|
||||
}
|
||||
catch (std::exception &ex) {
|
||||
// print out the reason for the failure and exit
|
||||
std::cerr << ex.what () << '\n';
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// retrieve the time_put facet installed in cout
|
||||
const std::time_put<char> &tput =
|
||||
std::use_facet<std::time_put<char> >(std::cout.getloc ());
|
||||
|
||||
// left-justify text
|
||||
std::cout.setf (std::cout.left);
|
||||
|
||||
// print out the time value formatted according to each
|
||||
// of the conversion specifiers defined above
|
||||
for (std::size_t i = 0; i != sizeof fmt / sizeof *fmt; ++i) {
|
||||
|
||||
const char* const spec = fmt [i].spec;
|
||||
|
||||
std::ostringstream tmp;
|
||||
|
||||
// format the directive, in quotes, in a temporary stringstream
|
||||
tmp << '"' << spec << '"';
|
||||
|
||||
// format the quoted directive in a field of the given width
|
||||
std::cout << " ";
|
||||
std::cout.width (8);
|
||||
std::cout << tmp.str ();
|
||||
|
||||
// clear the temporary stringstream
|
||||
tmp.str ("");
|
||||
|
||||
tmp << '"';
|
||||
if ('n' == spec [1])
|
||||
tmp << "\\n";
|
||||
else if ('t' == spec [1])
|
||||
tmp << "\\t";
|
||||
else
|
||||
tput.put (std::ostreambuf_iterator<char>(tmp.rdbuf ()),
|
||||
std::cout, '\0', &t, spec,
|
||||
spec + std::char_traits<char>::length (spec));
|
||||
|
||||
tmp << '"';
|
||||
|
||||
// format the string in a field of the given width
|
||||
std::cout.width (32);
|
||||
std::cout << tmp.str ();
|
||||
|
||||
// clear the temporary stringstream
|
||||
tmp.str ("");
|
||||
|
||||
const char* const d = spec + 1 + ('E' == *spec || 'O' == *spec);
|
||||
|
||||
if ('c' == *d || 'r' == *d || 'x' == *d || 'X' == *d) {
|
||||
|
||||
if (*fmt [i].desc) {
|
||||
// format the description of the directive
|
||||
tmp << fmt [i].desc << " (";
|
||||
}
|
||||
|
||||
tmp << "\"";
|
||||
|
||||
// extension of this implementation:
|
||||
// for %c, %r, %x, and %X, write out the formatting
|
||||
// string that the conversion specifier expands to
|
||||
tput.put (std::ostreambuf_iterator<char>(tmp.rdbuf ()),
|
||||
std::cout, '\0', 0, spec,
|
||||
spec + std::char_traits<char>::length (spec));
|
||||
|
||||
tmp << "\"";
|
||||
|
||||
if (*fmt [i].desc)
|
||||
tmp << ')';
|
||||
}
|
||||
else if (*fmt [i].desc) {
|
||||
// format the description of the directive
|
||||
tmp << fmt [i].desc;
|
||||
}
|
||||
|
||||
std::cout << tmp.str () << '\n';
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user