November 2005
Beginner to intermediate
594 pages
16h 23m
English
You want to convert a date and/or time to a formatted string.
You can use the time_put template class from the
<locale> header, as shown in Example 5-4.
Example 5-4. Formatting a datetime string
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <string>
#include <stdexcept>
#include <iterator>
#include <sstream>
using namespace std;
ostream& formatDateTime(ostream& out, const tm& t, const char* fmt) {
const time_put<char>& dateWriter = use_facet<time_put<char> >(out.getloc());
int n = strlen(fmt);
if (dateWriter.put(out, out, ' ', &t, fmt, fmt + n).failed()) {
throw runtime_error("failure to format date time");
}
return out;
}
string dateTimeToString(const tm& t, const char* format) {
stringstream s;
formatDateTime(s, t, format);
return s.str();
}
tm now() {
time_t now = time(0);
return *localtime(&now);
}
int main()
{
try {
string s = dateTimeToString(now(), "%A %B, %d %Y %I:%M%p");
cout << s << endl;
s = dateTimeToString(now(), "%Y-%m-%d %H:%M:%S");
cout << s << endl;
}
catch(...) {
cerr << "failed to format date time" << endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}Output of the program in Example 5-4 will resemble the following, depending on your local settings:
Sunday July, 24 2005 05:48PM 2005-07-24 17:48:11
The time_put
member function put uses a formatting
string specifier like the C printf function format string. Characters are output to the buffer as they appear in ...