5.2. Formatting a Date/Time as a String
Problem
You want to convert a date and/or time to a formatted string.
Solution
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
Discussion
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 ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.