C++ linux下获取时间戳 秒、微妙、纳秒

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)

猜你喜欢

转载自blog.csdn.net/qq_41661878/article/details/129422953