Подтвердить что ты не робот

Есть ли стандартный класс даты/времени в С++?

Есть ли у С++ stl стандартный класс времени? Или мне нужно преобразовать в c-строку перед записью в поток. Например, я хочу вывести текущую дату/время в поток строк:

time_t tm();
ostringstream sout;
sout << tm << ends;

В этом случае я получаю текущую дату/время, записанную как число без форматирования. я могу использовать c-runtime function strftime сначала форматировать tm, но похоже, что это не обязательно, если stl имеет класс времени, который может быть создан из значения time_t

4b9b3361

Ответ 1

Не входит в состав STL, но хорошо известна библиотека.

Я бы использовал способ boost::date. Вот несколько примеров: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial.

Если вы еще не опробовали повышение, я призываю вас сделать это, поскольку это избавит вас от множества неприятных проблем, поскольку оно маскирует большинство зависимых от ОС вещей, например, потоков. Многие вещи в boost являются только заголовками (библиотеки шаблонов). Однако для datetime требуется lib или dll.

Ответ 2

Nitpicking: STL, являющийся стандартной Template, имеет дело с универсальным контейнером и алгоритмами и т.д. и вряд ли будет включать классы для обработки дат и вычисления даже в будущем...

Сама стандартная библиотека С++ включает STL и предыдущую версию стандартной библиотеки C. Последний предлагает некоторые связанные с датой и временем функции через #include <ctime>, о котором уже говорилось выше.

Если обертывание (или просто использование) этих функций является достаточным (и более быстрым), чем вытягивание boost, перейдите к ним. В них нет ничего плохого.

Ответ 3

Есть get_time и put_time в <iomanip> заголовок (я думаю, что они пришли с С++ 11), который эффективно выполняет форматирование строк или синтаксический анализ.

Ответ 4

Существует также ctime (& time_t) метод, который выводит строку (char *).

Ответ 5

OK. Вот самое близкое, что я нашел о прямое время записи в поток:

time_t t(time(NULL));   // current time
tm tm(*localtime(&t));  

std::locale loc("");    // current user locale
ostringstream sout;
const std::time_put<TCHAR> &tput =
    std::use_facet<std::time_put<TCHAR> >(loc);
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x'));
sout << ends;

CString sTest(sout.str().c_str());

Очень полезным справочником является Справочное руководство по стандартной библиотеке Apache С++ http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13