Как печатать текущее время в С++ 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';