转自:https://blog.csdn.net/CAIYUNFREEDOM/article/details/75388111,https://www.runoob.com/w3cnote/cpp-time_t.html
1.例子
#include <iostream> #include <sys/time.h> #include <cstdlib> #include <cstdio> #include <ctime> #include <cmath> #include <unistd.h> using namespace 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(); return 0; }
输出:
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);