C++学习之路: 时间戳 封装成类

 1 #ifndef TIMESTAMP_H
 2 #define TIMESTAMP_H
 3
 4 #include <string>
 5 #ifndef __STDC_FORMAT_MACROS
 6 #define __STDC_FORMAT_MACROS
 7 #endif /* __STDC_FORMAT_MACROS */
 8 #include <inttypes.h>
 9
10 class Timestamp
11 {
12 public:
13     Timestamp();
14     Timestamp(int64_t value);
15
16     bool isValid() const
17     { 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 <time.h>
 3 #include <sys/time.h>
 4 #include <stdio.h>
 5 #include <string.h>
 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() const
22 {
23     //1411373695.488096
24     int64_t sec = value_ / (1000 * 1000);
25     int64_t usec = value_ % (1000 * 1000);
26     // %06lld
27     char text[32] = {0};
28     snprintf(text, sizeof text, "%lld.%06lld", sec, usec);
29
30     return string(text);
31 }
32
33 string Timestamp::toFormatString() const
34 {
35     //20140922 08:14:55.488096
36     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_min
44         , 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);           //获取时间戳偏移量
53
54     int64_t val = 0;
55     val += static_cast<int64_t>(tv.tv_sec) * 1000 * 1000;
56     val += tv.tv_usec;
57
58     return Timestamp(val);
59 }

测试文件

 1 #include "Timestamp.h"
 2 #include <iostream>
 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 }
时间: 2024-10-20 14:46:55

C++学习之路: 时间戳 封装成类的相关文章

Directx11学习笔记【二】 将HelloWin封装成类

我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /************************************************************************ 2 Directx11学习笔记[2] 将HelloWin封装成类 3 2016.01 by zhangbaochong 4 /

php使用GD库实现图片水印和缩略图——封装成类

学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来人,上代码! 首先,先创建一个PHP文件:class.php(自定义) 我们知道,在 在原始图片中添加文字水印:http://www.cnblogs.com/finalanddistance/p/7243346.html 在原始图片中添加图片水印:http://www.cnblogs.com/fin

structs2 jsp页面参数封装成类传递到action

中途切入一个系统的维护,而我又是菜鸟. 系统要实现从前端jsp页面输入查询条件,传入后台action进行处理.根据原来的系统本身的代码大概明白是jsp里ognl表达式传参数过去,但是一直不成功.百度各种办法,找到下面方法都试过,好像都不行.找耳挠腮搞半天才发现,我ognl表达式里的值得大小写和action里的类实例名不一致,真是不能更二咯-.- 对齐了jsp里的ognl表达式和action里的类实例名后,问题解决了.把我搜到的structs2 jsp传参数到后台action的方法记录下来,抄一遍

把ajax封装成类,用着方便

一直以来喜欢使用AJAX做一些方便的页面小功能,但是每次都写教案觉很费劲,于是封装了个简单的ajax类.毕竟不是精通js,还望各位指点一二~~ 不废话了,贴代码~~ function ajax() { this.request; this.header="/home/";//ajax初学最容易遇到的问题之一,路径问题,,一定要从域名后就开始写~~不是相对路径也不是绝对路径哈 this.createRequest=function() { var requests; if(window.

将窗口调节和选择菜单封装成类

这是我目前为止觉得自己写的最好的一段c++了,虽然还是挺烂的吧. //转载请注明Author : liutianchenHANDLE console_handle = GetStdHandle(STD_OUTPUT_HANDLE); const int width = 100, height = 30; const int marginleft = 3, margintop = 2; class window_set { private: char *title; int Lbg_color,

C++学习之路--(1.回顾类)

一.内联函数 1.在类声明内定义内联函数 2.内联函数 在C++中,用户可以创建实际上不调用的短函数,他们的代码在每次调用的程序行里得到扩展.这个过程类似于使用类似函数的宏.为使一个函数在程序行进行代码扩展而不被调用,只要在函数前面加上关键字inline即可. 例如,在下面的程序,函数max()在行内扩展而不被调用: #include <iostream> using namespace std; inline int max(int a, int b) {     return a>b

Java蒟蒻的学习之路——StringBuffer和StringBuilder类

String类型之前有过学习,但是发现了一个问题,就是String类型有个"隐形"的const,String的一些操作不能再源字符串中进行修改,必须要新建一个.但是StringBuffer和StingBuilder可以在源字符串中进行修改,StringBuffer支持多线程,但是在单线程中StringBuilder运行速度更快. 1 package javaLearning; 2 public class MainTest { 3 public static void main(Str

JavaScript封装成类

JavaScript在WEB编程中能起到很大的作用,将一些常用的功能写成JavaScript类库. 将下面代码保存为Common.js 类库功能: 1.Trim(str)--去除字符串两边的空格 2.XMLEncode(str)--对字符串进行XML编码 3.ShowLabel(str,str)--鼠标提示功能(显示字符,提示字符) 可以设置显示的提示的文字的字体.颜色.大小以及提示的背景颜色.边框等 4.IsEmpty(obj)--验证输入框是否为空 5.IsInt(objStr,sign,z

Ajax以及封装成类

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-