C ++中是否有标准的日期/时间类?

时间:2009-10-30 16:02:52

标签: c++ datetime stl stream

C ++ stl是否有标准时间类?或者我必须在写入流之前转换为c-string。例如,我想将当前日期/时间输出到字符串流:

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

在这种情况下,我将当前日期/时间写成没有任何格式的数字。我可以用 c-运行时函数strftime首先格式化tm,但是如果stl有一个可以从time_t值实例化的时间类,那么它似乎不是必需的

6 个答案:

答案 0 :(得分:22)

不是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,我鼓励您这样做,因为它可以避免许多令人讨厌的问题,因为它掩盖了大多数依赖操作系统的东西,例如线程。 boost中的许多内容仅为标题(模板库)。但是,datetime需要lib或dll。

答案 1 :(得分:14)

挑剔:作为标准模板库的STL处理通用容器和算法等,即使将来也不太可能包含用于日期处理和计算的类......

C ++标准库本身包括STL和C标准库的先前版本。后者通过上面已经提到的#include <ctime>提供了一些与日期和时间相关的功能。

如果包装(或简单地使用)这些功能足够(并且更快)而不是拉入boost,请使用这些功能。他们没有错。

答案 2 :(得分:6)

&lt; iomanip&gt;中有get_timeput_time标题(我猜这些来自C ++ 11),它有效地进行字符串格式化或解析作业。

答案 3 :(得分:4)

还有一个ctime(&amp; time_t)方法输出字符串(char *)。

答案 4 :(得分:4)

行。这是我发现的最接近直接写流的时间:

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

答案 5 :(得分:2)

C ++现在有日期和时间的计时库。 这在http://en.cppreference.com/w/cpp/chronohttp://www.cplusplus.com/reference/chrono/

中有记录