C++ stl 有标准的时间类吗?或者我是否必须在写入流之前转换为 c 字符串。例如,我想将当前日期/时间输出到字符串流:
time_t tm();
ostringstream 南;
sout << tm << 结束;
在这种情况下,我将当前日期/时间写成没有任何格式的数字。我可以使用c-运行时函数 strftime
首先格式化tm,但如果stl有一个可以从time_t值实例化的时间类,这似乎不是必需的
原文由 Farid Z 发布,翻译遵循 CC BY-SA 4.0 许可协议
好吧,这个问题被问到已经有十几年了。现在(在 C++20 中)它终于有了更好的答案。
是的,C++20 中有几个标准的日期/时间类(不仅仅是一个)。在强类型系统中,每一个都有不同的用途。例如
std::chrono::zoned_time
表示std::chrono::time_zone
和std::chrono::time_point<system_clock, SomeDuration>
的配对,并表示某些地理区域的当地时间。以下是您可以如何创建和打印当前时区的本地时间,以达到操作系统允许的最佳亚秒精度。如果您需要其他地方的当地时间,这很容易获得:
与以前的 C++ 标准不同,基于
time_point
的system_clock
现在 保证 代表 UTC,忽略闰秒(又名 Unix Time )。因此,要获得 UTC 中的当前时间,只需:虽然如果您真的想使用
zoned_time
代替(例如代码可能是通用的),这也可以:有关更多标准日期/时间类,请参阅 https://en.cppreference.com/w/cpp/chrono 。它们都是线程安全的。而且您不再局限于秒精度。