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