К сожалению, интерфейс к std::strftime()
менее полезен, чем интерфейс std::snprintf()
в том смысле, что он возвращает 0, если буфер слишком мал, а не количество символов, которое будет записано. Нам нужно увеличить размер буфера эвристически и повторить попытку, возможно, так:
#include <ctime>
#include <string>
#include <vector>
std::string time_to_string(const char *format, const std::tm* time)
{
// first try with an on-stack buffer (fast path)
char buf[200];
auto written = std::strftime(buf, sizeof buf, format, time);
if (written > 0) {
return buf;
}
// now, iterate with an allocated buffer
auto len = sizeof buf;
std::vector<char> v;
do {
v.resize(len *= 2);
written = std::strftime(v.data(), v.size(), format, time);
} while (written == 0);
return {v.data(), written};
}