Существует ли стандартный класс даты / времени в C ++? - PullRequest
28 голосов
/ 30 октября 2009

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

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

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

Ответы [ 6 ]

22 голосов
/ 30 октября 2009

Не является частью STL, но хорошо известная библиотека - это boost.

Я бы пошел путем использования 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.

14 голосов
/ 30 октября 2009

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

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

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

6 голосов
/ 13 августа 2012

В заголовке есть get_time и put_time (я полагаю, они поставляются с C ++ 11), который эффективно выполняет задания форматирования или синтаксического анализа строк.

4 голосов
/ 30 октября 2009

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 C ++. http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

4 голосов
/ 30 октября 2009

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

2 голосов
/ 26 мая 2018

C ++ теперь имеет хронографические библиотеки для даты и времени. Это задокументировано http://en.cppreference.com/w/cpp/chrono и http://www.cplusplus.com/reference/chrono/

...