muduo源码解析1-timestamp类

timestamp

class timestamp:public mymuduo::copyable,
                public boost::equality_comparable<timestamp>,
                public boost::less_than_comparable<timestamp>
{
};

 

作用:

主要是实现了时间戳的相关操作,例如时间戳的格式化,返回当前时间戳等等。

成员变量:

private:
    int64_t m_microSeconds;//数据成员,表示时间戳的微秒数
public:
  static const int microSecInSec=1000*1000;//1秒=1000*1000微妙

成员函数:

   timestamp():m_microSeconds(0);
    //构造函数,设置mircroseconds值
    explicit timestamp(int64_t ms):m_microSeconds(ms);
    //交换两个timestamp对象的值
    void swap(timestamp& that);
    //用std::string形式返回,格式[millisec].[microsec]
    string toString() const;
    //格式, "%4d年%02d月%02d日 星期%d %02d:%02d:%02d.%06d",时分秒.微秒
    string toFormattedString(bool ifShowMicroSec=true) const;
  //判断当前时间错是否合法,即是否>0
    bool valid() const;
  //返回当前时间戳的微妙
    int64_t microSecSinceEpoch() const;
  //返回当前时间戳的秒数
    time_t secSinceEpoch() const;
  //返回当前时间所在的时间戳
    static timestamp now();
    static timestamp invalid();
    //返回time_t所在的时间戳
    static timestamp fromUnixTime(time_t t);
    //返回time_t以microsec为偏移所在的时间戳
    static timestamp fromUnixTime(time_t t,int microsec);

类外相关函数:

  应当注意timestamp继承了boost等于和小于类,为了实现timestamp的比较操作符,应当重载timestamp的<和==操作符。

//继承了boost的比较类,需要自己实现<和==操作符的重载
inline bool operator<(timestamp l,timestamp r)
{
    return l.microSecSinceEpoch()<r.microSecSinceEpoch();
}
inline bool operator==(timestamp l,timestamp r)
{
    return l.microSecSinceEpoch()==r.microSecSinceEpoch();
}

//返回两个时间戳的差,用秒的形式返回
inline double timeDifference(timestamp high,timestamp low)
{
    int64_t diff=high.microSecSinceEpoch()-low.microSecSinceEpoch();
    return static_cast<double>(diff/timestamp::microSecInSec);
}

//返回一个时间戳加上给定秒数的新的时间戳
inline timestamp addTime(timestamp ts,double sec)
{
    int64_t microsec=ts.microSecSinceEpoch()+
            static_cast<int64_t>(sec)*timestamp::microSecInSec;
    return timestamp(microsec);
}

 

posted @ 2020-08-22 12:54  WoodInEast  阅读(263)  评论(0编辑  收藏  举报