1. 程式人生 > 實用技巧 >muduo原始碼解析1-timestamp類

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);
}