我尝试了几种方法来打印system_clock
的时间,但除了整秒之外我什么都得不到:
system_clock::time_point now = system_clock::now();
std::time_t now_c = system_clock::to_time_t(now);
std::cout<<ctime(&now_c);
std::cout<<std::put_time(std::localtime(&now_c), "%T")<<" ";
now()
函数实际上是否包含高精度数据,还是我找不到提取该信息进行打印的函数?
注意:我不打算计算时间间隔。我希望当前时间只有几分之一秒,并通过cout
打印出来。我找不到办法做到这一点。
我知道std::chrono::high_resolution_clock
,但也看不到打印now()
。此外,setprecision
函数对put_time
或ctime
的输出没有影响。
我一直在得到实际上没有解决这个问题的答案。
答案 0 :(得分:7)
您可以执行以下操作:
#include <chrono>
#include <ctime>
#include <iostream>
#include <string>
std::string GetLocalTime() {
auto now(std::chrono::system_clock::now());
auto seconds_since_epoch(
std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()));
// Construct time_t using 'seconds_since_epoch' rather than 'now' since it is
// implementation-defined whether the value is rounded or truncated.
std::time_t now_t(
std::chrono::system_clock::to_time_t(
std::chrono::system_clock::time_point(seconds_since_epoch)));
char temp[10];
if (!std::strftime(temp, 10, "%H:%M:%S.", std::localtime(&now_t)))
return "";
return std::string(temp) +
std::to_string((now.time_since_epoch() - seconds_since_epoch).count());
}
int main() {
std::cout << GetLocalTime() << '\n';
return 0;
}
答案 1 :(得分:0)
现有答案很好,但是它错过了秒的小数部分的前导零,因此21:10:30.01将返回为21:10:30.1
我没有评论的代表,我的编辑被拒绝了,所以这是固定版本:
#include <chrono>
#include <ctime>
#include <iostream>
#include <string>
std::string GetLocalTime() {
auto now(std::chrono::system_clock::now());
auto seconds_since_epoch(
std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()));
// Construct time_t using 'seconds_since_epoch' rather than 'now' since it is
// implementation-defined whether the value is rounded or truncated.
std::time_t now_t(
std::chrono::system_clock::to_time_t(
std::chrono::system_clock::time_point(seconds_since_epoch)));
char temp[10];
if (!std::strftime(temp, 10, "%H:%M:%S.", std::localtime(&now_t)))
return "";
std::string nanoseconds = std::to_string(
(std::chrono::duration<long long, std::nano>(
now.time_since_epoch() - seconds_since_epoch)).count());
return std::string(temp) + std::string(9-nanoseconds.length(),'0') + nanoseconds;
}
int main() {
std::cout << GetLocalTime() << '\n';
return 0;
}
答案 2 :(得分:-2)
试试std::chrono::high_resolution_clock。 (我认为它只是c ++ 11)