弄清std::chrono::system_clock::time_point,自定义时间工具类
生活随笔
收集整理的這篇文章主要介紹了
弄清std::chrono::system_clock::time_point,自定义时间工具类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
time_t 是32位的整數,用來存放格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數,不能表示毫秒,約能表示135年
time_t timep(0); printf("%d \n", timep); //0 time(&timep); /*獲得time_t結構的時間,UTC時間*/ printf("%d \n", timep); //1550036706 到現在為止的秒數 //#include<time.h> 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:00std::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>>(std::chrono::system_clock::now() - t).count();//秒 1536115132 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、自定義的時間工具類
#ifndef TOOL_TIME_H #define TOOL_TIME_H#include<iostream> #include<chrono> #include <time.h> #include <sys/time.h>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 now_to_us(){return std::chrono::duration_cast<std::chrono::microseconds>(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();}//"%Y-%m-%d %H:%M:%S"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_r(&tt, &local_time);strftime(_time, 22, "%Y-%m-%d %H:%M:%S", &local_time);return std::string(_time);}//"%d-%02d-%02d %02d:%02d:%02d.%03d"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_r(&tt, &local_time);//strftime(_time, 22, "%Y-%m-%d %H:%M:%S", local_time);sprintf(_time, "%d-%02d-%02d %02d:%02d:%02d.%03d", 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);}static uint64_t now_to_ms_ex(){struct timeval tv;::gettimeofday(&tv, 0);return tv.tv_sec*1000+tv.tv_usec/1000;}//"%Y-%m-%d %H:%M:%S"static time_t to_time(std::string str){time_t t_;tm tm_;strptime(str.c_str(), "%Y-%m-%d %H:%M:%S", &tm_); //將字符串轉換為tm時間t_ = mktime(&tm_); //將tm時間轉換為秒時間return t_;}"%d-%02d-%02d %02d:%02d:%02d.%03d"static std::chrono::system_clock::time_point to_time_ex(std::string str){int pos = str.length()-3;time_t t_;tm tm_;strptime(str.substr(0,pos).c_str(), "%Y-%m-%d %H:%M:%S", &tm_); //將字符串轉換為tm時間t_ = mktime(&tm_); //將tm時間轉換為秒時間int milli = std::stoi(str.substr(pos));return std::chrono::system_clock::time_point(std::chrono::milliseconds(t_*1000 + milli));}static std::string to_str_ex(uint64_t ms){uint64_t mill = ms%1000;char _time[25] = {0};time_t tt = ms/1000;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.%03d", 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);}static uint32_t elapse_seconds(time_t &start){time_t now;time(&now);return static_cast<uint32_t>(std::difftime(now, start));}//"%Y-%m-%d %H:%M:%S"static std::string to_str(const std::time_t &time){char _time[25] = {0};struct tm local_time;localtime_r(&time, &local_time);strftime(_time, 22, "%Y-%m-%d %H:%M:%S", &local_time);return std::string(_time);} };#endif // TOOL_TIME_H測試
int main() {auto now = std::chrono::system_clock::now();std::string tt=tool_time::to_str_ex(tool_time::now_to_ms());std::string tt2=tool_time::to_str_ex(tool_time::to_ms(now));std::string tt3=tool_time::to_str(std::chrono::system_clock::to_time_t(now));std::string tt4=tool_time::to_str(now);printf("%s\n", tt.c_str());printf("%s\n", tt2.c_str());printf("%s\n", tt3.c_str());printf("%s\n", tt4.c_str());printf("%ld\n", tool_time::to_time(tt));printf("%ld\n", tool_time::now_to_seconds());printf("%ld\n", tool_time::now_to_ms()/1000);printf("%ld\n", tool_time::now_to_ms_ex()/1000);printf("%ld\n", tool_time::now_to_ms());printf("%ld\n", tool_time::now_to_ms_ex());return 0; }結果:
2018-09-23 14:03:24.941 2018-09-23 14:03:24.941 2018-09-23 14:03:24 2018-09-23 14:03:24 1537682604 1537682604 1537682604 1537682604 1537682604941 1537682604941?
?
總結
以上是生活随笔為你收集整理的弄清std::chrono::system_clock::time_point,自定义时间工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python量化交易系统构建(一)
- 下一篇: java向excel中插入图片