弄清std::chrono::system_clock::time_point,自定义时间工具类

time_t 是32位的整数,表示从1970-01-01 08:00:00开始到现在的秒数,不能表示毫秒,约能表示135年

/* time_t 是一种时间类型,一般用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 */

struct tm {

int tm_sec; /* 秒–取值区间为[0,59] */

int tm_min; /* 分 - 取值区间为[0,59] */

int tm_hour; /* 时 - 取值区间为[0,23] */

int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

int tm_year; /* 年份,其值从1900开始 */

int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */

};

1、需要的头文件

#include <chrono>
#include <ctime>
#include <time.h>

2、std::chrono::system_clock::time_point的使用
    std::chrono::system_clock::time_point start_time;   //默认值为 1970-01-01 08:00:00

    std::chrono::system_clock::time_point t(std::chrono::seconds(2)) ;//初始化2秒  1970-01-01 08:00:02
    std::cout << t.time_since_epoch().count() <<std::endl;//纳秒  2000000000
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(t.time_since_epoch()).count() <<std::endl;//毫秒  2000
    std::cout << std::chrono::system_clock::now().time_since_epoch().count() <<std::endl; //纳秒  1536115134721690145
    uint64_t sec= std::chrono::duration_cast<std::chrono::duration<int>>//秒 1536115132
                  (std::chrono::system_clock::now() - t).count();
    std::cout << sec <<std::endl;
    sec= std::chrono::duration_cast<std::chrono::seconds>//秒 1536115132
            (std::chrono::system_clock::now() - t).count();
    std::cout << sec <<std::endl;
    sec= std::chrono::duration_cast<std::chrono::milliseconds>//毫秒 1536115132721
            (std::chrono::system_clock::now() - t).count();
    std::cout << sec <<std::endl;

3、自定义的时间工具类

class tool_time
{
public:
    static uint32_t elapse_seconds(std::chrono::system_clock::time_point &start)
    {
        return std::chrono::duration_cast<std::chrono::seconds>
                (std::chrono::system_clock::now() - start).count();
    }

    static uint64_t elapse_ms(std::chrono::system_clock::time_point &start)
    {
        return std::chrono::duration_cast<std::chrono::milliseconds>
                (std::chrono::system_clock::now() - start).count();
    }

    static uint32_t now_to_seconds()
    {
        return std::chrono::duration_cast<std::chrono::seconds>
                (std::chrono::system_clock::now().time_since_epoch()).count();
    }

    static uint64_t now_to_ms()
    {
        return std::chrono::duration_cast<std::chrono::milliseconds>
                (std::chrono::system_clock::now().time_since_epoch()).count();
    }

    static uint64_t to_ms(const std::chrono::system_clock::time_point &time)
    {
        return std::chrono::duration_cast<std::chrono::milliseconds>
                (time.time_since_epoch()).count();
    }

    static std::string to_str(const std::chrono::system_clock::time_point &time)
    {
        char _time[25] = {0};
        time_t tt = std::chrono::system_clock::to_time_t(time);
        struct tm *local_time=localtime(&tt);
        strftime(_time, 22, "%Y-%m-%d %H:%M:%S", local_time);

        return std::string(_time);
    }

    ///"%u-%u-%u %u:%u:%u.%u"
    static std::string to_str_ex(const std::chrono::system_clock::time_point &time)
    {
        uint64_t mill = std::chrono::duration_cast<std::chrono::milliseconds>(time.time_since_epoch()).count()
                -std::chrono::duration_cast<std::chrono::seconds>(time.time_since_epoch()).count()*1000;

        char _time[25] = {0};
        time_t tt = std::chrono::system_clock::to_time_t(time);
        struct tm *local_time=localtime(&tt);
        //strftime(_time, 22, "%Y-%m-%d %H:%M:%S", local_time);
        sprintf(_time, "%d-%02d-%02d %02d:%02d:%02d.%d", local_time->tm_year+1900,
                local_time->tm_mon+1, local_time->tm_mday, local_time->tm_hour,
                local_time->tm_min, local_time->tm_sec, mill);

        return std::string(_time);
    }
};


 

猜你喜欢

转载自blog.csdn.net/f110300641/article/details/82147885