参考:
- time(null)的用法link
- c/c++ 获取当前时间 精确到毫秒或者秒link
- C++获取当前时间link
- https://www.csdn.net/tags/MtTaEgzsMDM0Mzc2LWJsb2cO0O0O.html
- 深入理解std::chrono的时钟Clock
- std::chrono::high_resolution_clock简单测试
- C++11获取系统当前时间(精确到微秒)
代码:
#include <iostream>
//time(NULL)
#include <time.h>
//gettimeofday(&time, NULL)
#include <sys/time.h>
//std::chrono::steady_clock::now()
#include <chrono>
//usleep();
#include <unistd.h>
//double_t ms
#include <cmath>
//cv::getTickCount()
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
//精确到秒
std::cout << "****************************** t0 ******************************"<< std::endl;
int curtime01 = time(NULL);
usleep(1000000); // 微秒
sleep(1); //秒
int curtime02 = time(NULL);
std::cout << curtime02<< " - " <<curtime01 << " = "<< curtime02-curtime01<< " s" << std::endl;
//精确到毫秒
std::cout << "****************************** t1 ******************************"<< std::endl;
struct timeval time1;
gettimeofday(&time1, NULL);
long now_time11 = time1.tv_sec*1000 + time1.tv_usec/1000;
printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time11);
usleep(10000);
gettimeofday(&time1, NULL);
long now_time12 = time1.tv_sec*1000 + time1.tv_usec/1000;
printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time12);
std::cout << now_time12 << " - " << now_time11 << " = "<< now_time12-now_time11<< " ms" << std::endl;
//精确到毫秒
std::cout << "****************************** t2 ******************************"<< std::endl;
auto t21 = std::chrono::steady_clock::now();
//std::chrono::steady_clock::time_point t11 = std::chrono::steady_clock::now();
usleep(10000);
std::chrono::steady_clock::time_point t22 = std::chrono::steady_clock::now();
//auto t21 = std::chrono::steady_clock::now();
using double_ms = std::chrono::duration<double,std::milli>;//
double_t ms = std::chrono::duration_cast<double_ms>(t22-t21).count();
std::cout << "Time elapsed: "<< ms << " ms" << std::endl;
//精确到毫秒
std::cout << "****************************** t3 ******************************"<< std::endl;
long t31 = cv::getTickCount();
usleep(10000);
long t32 = cv::getTickCount();
std::cout << "Time elapsed: " << (t32 - t31) / cv::getTickFrequency() * 1000 << " "<< "ms" << std::endl;
//精确到毫秒
std::cout << "****************************** t4 ******************************"<< std::endl;
std::chrono::system_clock::time_point t41 = std::chrono::system_clock::now();
std::time_t tt41 = std::chrono::system_clock::to_time_t(t41); //转换为旧式接口,单位:秒
std::cout << tt41 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
std::chrono::system_clock::duration duration_since_epoch_t41 = t41.time_since_epoch();
std::time_t milliseconds_since_epoch_t41 = std::chrono::duration_cast< std::chrono::milliseconds>(duration_since_epoch_t41).count();
std::cout << milliseconds_since_epoch_t41 << " milliseconds from 1970-01-01 00:00:00 UTC" << std::endl;
std::time_t microseconds_since_epoch_t41 = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch_t41).count();
std::cout << microseconds_since_epoch_t41 << " microseconds from 1970-01-01 00:00:00 UTC" << std::endl;
gettimeofday(&time1, NULL);
long now_time41 = time1.tv_sec*1000 + time1.tv_usec/1000;
printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time41);
usleep(1000000);
std::cout << "--------- " << 1000 << " ms ----------" << std::endl;
gettimeofday(&time1, NULL);
long now_time42 = time1.tv_sec*1000 + time1.tv_usec/1000;
printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time42);
std::chrono::system_clock::time_point t42 = std::chrono::system_clock::now();//stl库获取当前时间
//std::time_t newTime = std::chrono::system_clock::to_time_t(timePoint);//转换为旧式接口,单位:秒
long tt42 = std::chrono::system_clock::to_time_t(t42);
std::cout << tt42 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
std::chrono::system_clock::duration duration_since_epoch_t42 = t42.time_since_epoch();
//long long microseconds_since_epoch = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch).count(); // 将时长转换为微秒数
std::time_t milliseconds_since_epoch_t42 = std::chrono::duration_cast< std::chrono::milliseconds>(duration_since_epoch_t42).count();
std::cout << milliseconds_since_epoch_t42 << " milliseconds from 1970-01-01 00:00:00 UTC" << std::endl;
std::time_t microseconds_since_epoch_t42 = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch_t42).count(); // 将时长转换为微秒数
std::cout << microseconds_since_epoch_t42 << " microseconds from 1970-01-01 00:00:00 UTC" << std::endl;
//精确到纳秒、微秒
std::cout << "****************************** t5 ******************************"<< std::endl;
std::chrono::high_resolution_clock::time_point t51 = std::chrono::high_resolution_clock::now();
std::time_t tt51 = std::chrono::high_resolution_clock::to_time_t(t51);
std::cout << tt51 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
usleep(1000000);
std::cout << "--------- " << 1000 << " ms ---------- " << 1 << " s ---------" << std::endl;
std::chrono::high_resolution_clock::time_point t52 = std::chrono::high_resolution_clock::now();
std::time_t tt52 = std::chrono::high_resolution_clock::to_time_t(t52);
std::cout << tt52 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
std::chrono::nanoseconds t5 = t52 -t51;
std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::seconds>(t5).count()<< " seconds" << std::endl;
std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::milliseconds>(t5).count()<< " milliseconds" << std::endl;
std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::microseconds>(t5).count()<< " microseconds" << std::endl;
std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::nanoseconds>(t5).count()<< " nanoseconds" << std::endl;
return 0;
}
打印结果:
****************************** t0 ******************************
1651049763 - 1651049761 = 2 s
****************************** t1 ******************************
s: 1651049763, ms: 1651049763105
s: 1651049763, ms: 1651049763115
1651049763115 - 1651049763105 = 10 ms
****************************** t2 ******************************
Time elapsed: 10.0911 ms
****************************** t3 ******************************
Time elapsed: 10.1087 ms
****************************** t4 ******************************
1651049763 seconds from 1970-01-01 00:00:00 UTC
1651049763136 milliseconds from 1970-01-01 00:00:00 UTC
1651049763136177 microseconds from 1970-01-01 00:00:00 UTC
s: 1651049763, ms: 1651049763136
--------- 1000 ms ----------
s: 1651049764, ms: 1651049764136
1651049764 seconds from 1970-01-01 00:00:00 UTC
1651049764136 milliseconds from 1970-01-01 00:00:00 UTC
1651049764136337 microseconds from 1970-01-01 00:00:00 UTC
****************************** t5 ******************************
1651049764 seconds from 1970-01-01 00:00:00 UTC
--------- 1000 ms ---------- 1 s ---------
1651049765 seconds from 1970-01-01 00:00:00 UTC
Time elapsed: 1 seconds
Time elapsed: 1000 milliseconds
Time elapsed: 1000123 microseconds
Time elapsed: 1000123292 nanoseconds
Process finished with exit code 0