2013-07-23 2 views
17

Есть ли простой способ в C++ 11 распечатать текущее время стены, используя соответствующие правила форматирования языка, связанного с используемым тестом?Как печатать текущее время в C++ 11?

То, что я действительно хочу сделать что-то вроде этого:

myStream << std::chrono::system_clock::now(); 

и иметь дату и время распечатана в соответствии с тем, что локаль связана с myStream. C++ 11 предлагает put_time, но он принимает строку форматирования, и я хочу, чтобы формат определялся ассоциацией локали с потоком. Также есть time_put и time_put_byname, но на основе примеров на cppreference.com эти функции используются в сочетании с put_time.

Нет ли простого способа распечатать значение временной точки без его форматирования вручную?

ответ

16

Вы можете использовать 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'; 
+9

Im удивлен тем, что нет * современного * способа печати данных datetime. Мы должны использовать API API старого стиля. Но, хорошо, 'std :: chrono' - большой шаг вперед в вопросах времени. Но не C++ 11 способ печатать время? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) не был стандартизирован (не уверен, было ли это из-за временного давления или по другим причинам). –

+0

@RMartinhoFernandes Спасибо! Я этого не знал. – Manu343726

Смежные вопросы