使用std :: chrono在C ++中输出date和时间
我一直在升级一些旧的代码,并试图尽可能更新到C ++ 11。 以下代码是我用来在程序中显示时间和date的方式
#include <iostream> #include <string> #include <stdio.h> #include <time.h> const std::string return_current_time_and_date() const { time_t now = time(0); struct tm tstruct; char buf[80]; tstruct = *localtime(&now); strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct); return buf; }
我想使用std :: chrono(或类似的)类似的格式输出当前的时间和date,但我不确定如何去做。 任何帮助将不胜感激。 谢谢
<chrono>
库只处理时间而不是date,除了system_clock
有能力将其时间点转换为time_t
。 所以使用<chrono>
进行date并不会有太大的改进。 希望我们能在不久的将来得到像chrono::date
这样的东西。
也就是说,你可以按如下方式使用<chrono>
:
#include <chrono> // chrono::system_clock #include <ctime> // localtime #include <sstream> // stringstream #include <iomanip> // put_time #include <string> // string std::string return_current_time_and_date() { auto now = std::chrono::system_clock::now(); auto in_time_t = std::chrono::system_clock::to_time_t(now); std::stringstream ss; ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X"); return ss.str(); }
请注意, std::localtime
可能会导致数据竞争。 localtime_r
或类似的function可能在您的平台上可用。
更新:
使用Howard Hinnant的date库的新版本,你可以写:
#include "date.h" #include <chrono> #include <string> #include <sstream> std::string return_current_time_and_date() { auto now = std::chrono::system_clock::now(); auto today = date::floor<days>(now); std::stringstream ss; ss << today << ' ' << date::make_time(now - today) << " UTC"; return ss.str(); }
这将打印出“2015-07-24 05:15:34.043473124 UTC”。
在不相关的说明中,使用C ++ 11返回const
对象已经不合要求了; 常量返回值不能被移动。 我也删除了尾随const,因为尾随const只对成员函数有效,并且这个函数不需要是成员。