C++: format time in ISO-8601
#include <chrono>
std::string to_iso_8601(std::chrono::time_point<std::chrono::system_clock> t)
{
// convert to time_t which will represent the number of
// seconds since the UNIX epoch, UTC 00:00:00 Thursday, 1st. January 1970
time_t epoch_seconds = std::chrono::system_clock::to_time_t(t);
// Format this as date time to seconds resolution
// e.g. 2016-08-30T08:18:51
std::stringstream stream;
struct tm buf;
gmtime_s(&buf, &epoch_seconds);
stream << std::put_time(&buf, "%FT%T");
// If we now convert back to a time_point we will get the time truncated
// to whole seconds
auto truncated = std::chrono::system_clock::from_time_t(epoch_seconds);
// Now we subtract this seconds count from the original time to
// get the number of extra microseconds..
auto delta_us = std::chrono::duration_cast<std::chrono::microseconds>(t - truncated).count();
// And append this to the output stream as fractional seconds
// e.g. 2016-08-30T08:18:51.867479
stream << "." << std::fixed << std::setw(6) << std::setfill('0') << delta_us;
return stream.str();
}
to get current time, add default to definition:
std::string to_iso_8601(std::chrono::time_point<std::chrono::system_clock> t = std::chrono::system_clock::now());
To contact me, send an email anytime or leave a comment below.