博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++学习之路: 时间戳 封装成类
阅读量:5946 次
发布时间:2019-06-19

本文共 2413 字,大约阅读时间需要 8 分钟。

1 #ifndef TIMESTAMP_H 2 #define TIMESTAMP_H  3  4 #include 
5 #ifndef __STDC_FORMAT_MACROS 6 #define __STDC_FORMAT_MACROS 7 #endif /* __STDC_FORMAT_MACROS */ 8 #include
9 10 class Timestamp11 {12 public:13 Timestamp();14 Timestamp(int64_t value);15 16 bool isValid() const17 { return value_ > 0; }18 19 std::string toString() const;20 std::string toFormatString() const; 21 22 static Timestamp now(); //获取时间戳23 24 private:25 int64_t value_; //微秒级别的时间戳26 };27 28 29 #endif /*TIMESTAMP_H*/

 

 

源文件

 

1 #include "Timestamp.h" 2 #include 
3 #include
4 #include
5 #include
6 using namespace std; 7 8 9 Timestamp::Timestamp()10 :value_(0)11 {12 13 }14 15 Timestamp::Timestamp(int64_t value)16 :value_(value)17 {18 19 }20 21 string Timestamp::toString() const22 {23 //1411373695.48809624 int64_t sec = value_ / (1000 * 1000);25 int64_t usec = value_ % (1000 * 1000);26 // %06lld27 char text[32] = {
0};28 snprintf(text, sizeof text, "%lld.%06lld", sec, usec);29 30 return string(text);31 }32 33 string Timestamp::toFormatString() const34 {35 //20140922 08:14:55.48809636 time_t sec = value_ / (1000 * 1000);37 int64_t usec = value_ % (1000 * 1000);38 struct tm st;39 //gmtime_r(&sec, &st);40 localtime_r(&sec, &st); //localtime只是把时间戳转换为我们所熟知的 2014.7.40 xx:xx:xx 的格式 并不获取时间41 42 char text[100] = {
0};43 snprintf(text, sizeof text, "%04d%02d%02d %02d:%02d:%02d.%06lld", st.tm_year + 1900, st.tm_mon + 1, st.tm_mday, st.tm_hour, st.tm_min44 , st.tm_sec, usec);45 return string(text);46 }47 48 Timestamp Timestamp::now()49 {50 struct timeval tv;51 memset(&tv, 0, sizeof tv);52 gettimeofday(&tv, NULL); //获取时间戳偏移量 核心函数,获取1970.1.1 00:00:00 到现在经过的秒数,精确到毫秒级53 54 int64_t val = 0;55 val += static_cast
(tv.tv_sec) * 1000 * 1000;56 val += tv.tv_usec;57 58 return Timestamp(val);59 }

 

测试文件

1 #include "Timestamp.h" 2 #include 
3 using namespace std; 4 5 int main(int argc, char const *argv[]) 6 { 7 Timestamp now = Timestamp::now(); 8 9 cout << now.toString() << endl;10 cout << now.toFormatString() << endl;11 return 0;12 }

 

转载于:https://www.cnblogs.com/DLzhang/p/3987913.html

你可能感兴趣的文章
CStdioFile::Seek
查看>>
Android内核开发:学会分析系统的启动log
查看>>
sshpass+expect解决交互式问题
查看>>
在kivy中使用模板
查看>>
poj 1742 roads
查看>>
笔记:学习JavaWeb开发第二课
查看>>
Go实现FastCgi Proxy Client 系列(一)
查看>>
不能用array === null 来判断数组为空!!!
查看>>
关于对象的存在和销毁
查看>>
如何移动CleanMyMac激活码到另一台Mac上
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>
正则表达式验证身份证格式是否正确
查看>>
Firebird(全功能的,免维护的数据库,能够管理多个独立的数据库) V2.1.3 英文特别版...
查看>>
Spring框架简介
查看>>
xml格式文件解析
查看>>
ios百度地图-路径规划
查看>>
Python高效编程技巧
查看>>
配置Eclipse使用maven构建项目默认JDK为1.8
查看>>
博客分享:程序员提升自我必备
查看>>
【细品架构10/100】架构由术至道的转变(1)
查看>>