我试过this和我在网上找到的其他代码,但都不起作用。我的IDE是Xcode。编辑:当我尝试链接上的代码时,变量long long微秒总是返回0。我想以这种方式打印时间戳:(小时:分钟:微秒)。例如,15:17:09:134613464312。
h9a6wy2h1#
你使用的方法是正确的。如果两次now()调用之间的代码持续时间小于1微秒,则微秒将始终为零,因为该数字不是浮点数。如果总是0,这意味着你需要更高的分辨率(尝试纳秒)。顺便说一句,如果你只是想要时间戳,你不想使用这段代码,因为它是用来计算两个时间点之间的时间。你可以试试这样的方法:
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds> (std::chrono::high_resolution_clock::now().time_since_epoch()).count();
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>
(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
它实际上是一个时间戳而不是持续时间。编辑:要获得当前的微秒计数,您可以这样做:
#include <iostream>#include <chrono>#include <ctime>using namespace std;using namespace std::chrono;using days = duration<int, ratio_multiply<hours::period, ratio<24> >::type>;int main() { system_clock::time_point now = system_clock::now(); system_clock::duration tp = now.time_since_epoch(); days d = duration_cast<days>(tp); tp -= d; hours h = duration_cast<hours>(tp); tp -= h; minutes m = duration_cast<minutes>(tp); tp -= m; seconds s = duration_cast<seconds>(tp); tp -= s; cout << tp.count() << "\n"; return 0;}
#include <iostream>
#include <chrono>
#include <ctime>
using namespace std;
using namespace std::chrono;
using days = duration<int, ratio_multiply<hours::period, ratio<24> >::type>;
int main() {
system_clock::time_point now = system_clock::now();
system_clock::duration tp = now.time_since_epoch();
days d = duration_cast<days>(tp);
tp -= d;
hours h = duration_cast<hours>(tp);
tp -= h;
minutes m = duration_cast<minutes>(tp);
tp -= m;
seconds s = duration_cast<seconds>(tp);
tp -= s;
cout << tp.count() << "\n";
return 0;
}
这将打印当前的微秒计数。小时:分钟:秒是很容易的。
yrefmtwq2#
在前面的答案的基础上,下面是OP的问题:
#include <iostream>#include <chrono>#include <ctime>std::string ts() { using namespace std; using namespace std::chrono; using days = duration<int, ratio_multiply<hours::period, ratio<24> >::type>; high_resolution_clock::time_point now = high_resolution_clock::now(); high_resolution_clock::duration tp = now.time_since_epoch(); days d = duration_cast<days>(tp); tp -= d; hours h = duration_cast<hours>(tp); tp -= h; minutes m = duration_cast<minutes>(tp); tp -= m; seconds s = duration_cast<seconds>(tp); tp -= s; milliseconds ms = duration_cast<milliseconds>(tp); tp -= ms; microseconds us = duration_cast<microseconds>(tp); tp -= us; nanoseconds ns = duration_cast<nanoseconds>(tp); tp -= ns; std::ostringstream oss; oss << std::setfill('0') << std::setw(2) << h.count() << ":" << std::setw(2) << m.count() << ":" << std::setw(2) << s.count() << "." << std::setw(3) << ms.count() << std::setw(3) << us.count() << std::setw(3) << ns.count(); return oss.str();}void main (){ std::cout << ts() << std::endl; std::cout << ts() << std::endl;}//output://22:43:00.295605757//22:43:00.295640327
std::string ts() {
high_resolution_clock::time_point now = high_resolution_clock::now();
high_resolution_clock::duration tp = now.time_since_epoch();
milliseconds ms = duration_cast<milliseconds>(tp);
tp -= ms;
microseconds us = duration_cast<microseconds>(tp);
tp -= us;
nanoseconds ns = duration_cast<nanoseconds>(tp);
tp -= ns;
std::ostringstream oss;
oss << std::setfill('0')
<< std::setw(2) << h.count() << ":"
<< std::setw(2) << m.count() << ":"
<< std::setw(2) << s.count() << "."
<< std::setw(3) << ms.count()
<< std::setw(3) << us.count()
<< std::setw(3) << ns.count();
return oss.str();
void main ()
{
std::cout << ts() << std::endl;
//output:
//22:43:00.295605757
//22:43:00.295640327
2条答案
按热度按时间h9a6wy2h1#
你使用的方法是正确的。
如果两次now()调用之间的代码持续时间小于1微秒,则微秒将始终为零,因为该数字不是浮点数。如果总是0,这意味着你需要更高的分辨率(尝试纳秒)。
顺便说一句,如果你只是想要时间戳,你不想使用这段代码,因为它是用来计算两个时间点之间的时间。你可以试试这样的方法:
它实际上是一个时间戳而不是持续时间。
编辑:要获得当前的微秒计数,您可以这样做:
这将打印当前的微秒计数。
小时:分钟:秒是很容易的。
yrefmtwq2#
在前面的答案的基础上,下面是OP的问题: