Как печатать текущее время в С++ 11?
Есть ли простой способ в С++ 11 распечатать текущее время стены, используя соответствующие правила форматирования языка, связанного с используемым тестом?
Я действительно хочу сделать что-то вроде этого:
myStream << std::chrono::system_clock::now();
и иметь дату и время, напечатанное в соответствии с любым языковым стандартом, связанным с myStream
. С++ 11 предлагает put_time
, но для этого требуется строка форматирования, и я хочу, чтобы формат определялся ассоциацией локали с потоком. Там также time_put
и time_put_byname
, но на основе примеров на cppreference.com эти функции используются вместе с put_time
.
Нет ли простого способа распечатать значение временной точки без его форматирования вручную?
Ответы
Ответ 1
Вы можете использовать put_time
со строкой формата, например "%c"
. %c
- спецификатор формата для стандартной даты и времени для локали. Результат выглядит так: "Tue Jul 23 19:32:18 CEST 2013" на моей машине (POSIX en_US locale, в немецком часовом поясе).
auto now = std::chrono::system_clock::now();
auto now_c = std::chrono::system_clock::to_time_t(now);
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n';