2015-04-01 188 views
0

我想知道什么是在Linux(C++)中获取时间戳最便宜的方法。
我认为这是一个准确的交易,所以我相信有超过1种可能性。
我需要毫秒但不一定microseconds,所以std::localtime不是一个选项,gettimeofday可能太昂贵。 (由于微秒准确度)。'最便宜的'在Linux(C++)中获取时间戳的方式

+0

你在Bash /控制台或在C++的意思? – 2015-04-01 08:24:17

+0

C++,编辑que – SagiLow 2015-04-01 08:30:21

+0

我们不能回答,直到你澄清你是什么意思与'最便宜'。通常的打印方法是使用gettimeofday()并将答案转换为毫秒:((tv_sec * 1000)+(tv_usec/1000))或微秒:(tv_sec * 1000000 + tv_usec)。 编辑:确保你用很长的时间来对这两个问题进行解答。 – guilleamodeo 2015-04-01 08:36:01

回答

0

我建议的ctime库和下面的代码:

std::time_t timestamp = std::time(nullptr); 
    std::cout << std::asctime(std::localtime(&result)) 
       << result << " seconds since the Epoch\n"; 

从纪元(非常简单的),这将在“结果”变量返回的秒数。有很多方法可以将其转换为可读格式,但正如您所说,这样做的代价很高。获取该数字将非常有效,因为它仅从系统读取变量,而不是转换/连接并计算可读日期。

+0

谢谢,我想这是最便宜的,但我需要比秒更好的分辨率(毫秒,我猜?) – SagiLow 2015-04-01 08:32:10

1

1:fprintf(stdout, "%u\n", (unsigned)time(NULL));

2:struct timeval tv; gettimeofday(&tv,NULL); tv.tv_sec // seconds tv.tv_usec // microseconds

3:std::time_t result = std::time(nullptr); std::cout << std::asctime(std::localtime(&result)) << result << " seconds since the Epoch\n";

4:

using namespace std::chrono; 
milliseconds ms = duration_cast<milliseconds>(
    high_resolution_clock::now().time_since_epoch() 
);` 
+0

感谢您的回答,第二个并不便宜,最后是第一个答案并只包含秒,我不知道我明白了第一个)... – SagiLow 2015-04-01 08:37:18

+0

@SagiLow尝试chrono – user3013807 2015-04-01 08:52:22

+0

生病了看看,谢谢! – SagiLow 2015-04-01 09:51:36