4-muduo-base-Timestamp

Timestamp
+int64_t microSecondsSinceEpoch
+int kMicroSecondsPerSecond
lt;>-Timestamp()
lt;>-Timestamp(microSecondsSinceEpoch)
+swap(Timestamp) : void
+toString() : string
+toFormattedString() : string
+valid() : bool
+microSecondsSinceEpoch() : int64_t
+now() : Timestamp
+invalid() : Timestamp

1 类说明

  • 功能:
    • 时间戳及对应的功能,以μs微秒为单位
  • 继承:
    • muduo::copyable(空基类,标识类)
      • 标签类,表示可以这是复制的类。(值语义)
    • boost::equality_comparable< Timestamp >
      • 类只要实现对operator==就会自动实现!=。(a != b 相当于 !(a == b)
    • boost::less_than_comparable< Timestamp >
      • 继承使用此类可以只重写operator< ,剩下的<= ,>会自动生成. (a <= b 相当于 b < a)、(a > b 相当于 b < a

2 成员变量说明

  • microSecondsSinceEpoch_
    • 顾名思义,以μs微秒为单位的时间戳,类型为int64_t,1 s = 10^6 μs。这个数值是距离时间纪元1970-01-01 00:00:00的微秒数。
  • kMicroSecondsPerSecond
    • 静态成员变量,指明一秒有多说微秒(1s = 100000μs)。(命名规范常量用k(小写)开头命名)

3 成员函数说明

1 non-static

  • 构造函数:两个版本,一个是无参数,一个有一个int64_t的值
    • 初始化microSecondsSinceEpoch_
  • swap
    • 交换两个Timestamp
  • toString
    • 转为string
  • toFormattedString
    • 转化为格式化string
  • valid
    • 检查microSecondsSinceEpoch_是否大于0
  • microSecondsSinceEpoch
    • 返回microSecondsSinceEpoch_时间戳的值
  • secondsSinceEpoch,返回类型是time_t也即是long int
    • 转换为秒,microSecondsSinceEpoch_ / kMicroSecondsPerSecond

2 static

  • now
    • 利用timeval结构体,获得当前秒数,从而获得微秒数并返回Timestamp类型
  • invalid
    • 返回一个微秒数为0的Timestamp对象
  • fromUnixTime
    • 将Unix时间(time_t)转为Timestamp类型

3 inline(非成员函数)

在头文件的函数,如果只有声明,没有定义,当引用头文件需要链接到其他.o文件,没有就会报错undefined reference

如果有定义,且不为inline,当有多个文件引用到该头文件时会报错multiple reference

  • 重载 < 和 ==

    • 都是直接比较microSecondsSinceEpoch_
  • timeDifference

    • 返回两个时间戳之差(以秒返回)
  • addTime

    • Timstamp加上传入秒数

4 测试

  • 用当前时间构造一个Timestamp对象,转换成字符串并打印
  • 将上面的对象以值传递和引用传递方式传递到函数进行打印
  • 时间衡量:将100个now的Timestamp对象放进vector,计算第一个和最后一个之差的时间。并且计算vector中相邻两个Timestamp对象之差。

5 其他

  • static_assert关键字:用来做编译期间的断言。语法:static_assert(常量表达式,提示字符串)。当表达式为true时,什么都不做;当表达式为false,产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串。

    • PRI64:int64_t用来表示64位整数,在32位系统中是long long int,而在64位系统中是long int,所以在打印int64_t的格式化方法(这种方法不太合适)
      • printf("%ld", value) // 64bit OS
      • printf("%lld", value) // 32bit OS
    • 跨平台做法:(会自动转换成上面的)
    #ifndef __STDC_FORMAT_MACROS
    #define __STDC_FORMAT_MACROS
    #endif
    
    #include <inttypes.h>
    
    prinf("%" PRId64 \n", value)
    

    muduo中的:

    snprintf(buf, sizeof(buf), "%" PRId64 ".%06" PRId64 "", seconds, microseconds);
    

Todo: TimeZone源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值