Простой вопрос: как правильно преобразовать std::chrono::time_point
в std::string
с минимальным количеством кода?
Примечания: я не хочу использовать cout
с put_time()
. Принимаются решения C++11 и C++14.
Простой вопрос: как правильно преобразовать std::chrono::time_point
в std::string
с минимальным количеством кода?
Примечания: я не хочу использовать cout
с put_time()
. Принимаются решения C++11 и C++14.
#include "date/date.h"
#include <type_traits>
int
main()
{
auto s = date::format("%F %T", std::chrono::system_clock::now());
static_assert(std::is_same<decltype(s), std::string>, "");
}
date/date.h
находится здесь. Это библиотека только для заголовков, С++ 11/14/17. Он имеет письменную документацию и видео-введение.
В С++ 20 синтаксис такой:
#include <chrono>
#include <format>
#include <type_traits>
int
main()
{
auto s = std::format("{:%F %T}", std::chrono::system_clock::now());
static_assert(std::is_same_v<decltype(s), std::string>{});
}
Использование только заголовков стандартной библиотеки:
#include <ctime>
#include <chrono>
#include <string>
using sc = std::chrono::system_clock ;
std::time_t t = sc::to_time_t(sc::now());
char buf[20];
strftime(buf, 20, "%d.%m.%Y %H:%M:%S", localtime(&t));
std::string s(buf);