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

转自: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秒级 ----:1687675336
10e6 微秒级s ----:1687675336s,918211微秒
----10e9 纳秒级s ----:1687675336s,918219727纳秒

 

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);

  

posted @ 2022-10-16 15:39  lypbendlf  阅读(4831)  评论(0编辑  收藏  举报