1.例子
#include <iostream>
#include <sys/time.h>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <cmath>
#include <unistd.h>
usingnamespace std;
time_t clocktime()
{
time_t t = time(NULL);
std::cout << " s秒级 ----:";
std::cout << t << endl;
struct timeval tv;
gettimeofday(&tv, NULL);
std::cout << "10e6 微秒级s ----:";
std::cout << tv.tv_sec << "s," << tv.tv_usec << "微秒" << endl;
struct timespec tn;
cout << "----";
clock_gettime(CLOCK_REALTIME, &tn);
std::cout << "10e9 纳秒级s ----:";
std::cout << tn.tv_sec << "s," << tn.tv_nsec << "纳秒" << endl;
}
int main()
{
clocktime();
return0;
}
输出:
s秒级 ----:1665905053
10e6 微秒级s ----:1665905053s,19892微秒
----10e9 纳秒级s ----:1665905053s,19906029纳秒
2.介绍
2.1 秒级
秒级直接time(NULL)获取就行,其中time_t类型,time_t 这种类型就是用来存储从1970年到现在经过了多少秒,看了一下宏定义,
#define __SLONGWORD_TYPE long int
应该就是长整型类型的。
2.2 微秒级
struct timeval
{
long tv_sec; /*秒*/long tv_usec; /*微秒*/
};
结构体struct timeval,它精确到微妙。
https://blog.csdn.net/CV_Jason/article/details/85244813,其中,long int即long,它和int一样,只有32位。在实际的使用中,long与int几乎没有区别。long long则不同,long long是C++的64位整型的基本类型。long 和int只是因为早期C编译器格式的问题。
int gettimeofday(struct timeval *tv, struct timezone *tz);
返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用。
2.3 纳秒
https://www.cnblogs.com/book-gary/p/3716790.html
struct timespec
{
__time_t tv_sec; /* Seconds. */
__syscall_slong_t tv_nsec; /* Nanoseconds. */
};
一般由函数int clock_gettime(clockid_t, struct timespec *)获取特定时钟的时间,CLOCK_REALTIME 统当前时间,从1970年1.1日算起。
3.时间戳转日期
https://www.jianshu.com/p/f50324284592
struct tm stime;
time_t now = time(0);
localtime_r(&now, &stime);
char tmp[32] = { NULL };
strftime(tmp, sizeof(tmp), "%Y-%m-%d_%H:%M:%S", &stime);
string date(tmp);
转自:C++获取时间戳 秒、微妙、纳秒 - lypbendlf - 博客园 (cnblogs.com)