c++时间类

复制代码
 1 using XTimePoint = std::chrono::time_point<std::chrono::system_clock>;
 2 using XTimeSpan  = std::chrono::seconds;
 3 
 4 class XDataTime {
 5 public:
 6     XDataTime() = default;
 7     XDataTime(const XTimePoint& time)
 8         : m_TimePoint(time)
 9     {
10     }
11     ~XDataTime() = default;
12 
13     XDataTime operator+(const XTimeSpan tt) const { return { m_TimePoint + tt }; }
14     XTimeSpan operator-(const XDataTime dt) const { return { std::chrono::duration_cast<std::chrono::seconds>(m_TimePoint - dt.m_TimePoint) }; }
15 
16     tm        toTm() const
17     {
18         const time_t tt = std::chrono::system_clock::to_time_t(m_TimePoint);
19         return *localtime(&tt);
20     }
21 
22     char* toString(const char* format = nullptr) const
23     {
24         if(format == nullptr) {
25             static char retStr[20];
26 
27             if(sprintf(retStr, "%d-%d%d-%d%d %d%d:%d%d:%d%d.%d", year(), month() / 10, month() % 10, day() / 10, day() % 10, hour() / 10, hour() % 10, minute() / 10, minute() % 10, second() / 10,
28                        second() % 10, millisecond())
29                < 0)
30                 return nullptr;
31             return retStr;
32         }
33         return nullptr;
34     }
35 
36     /// 当前时间.
37     static XDataTime now() { return { std::chrono::system_clock::now() }; }
38     /// 四位数年份
39     int              year() const { return toTm().tm_year + 1900; }
40     /// 两位数月份[1,12]
41     int              month() const { return toTm().tm_mon + 1; }
42     /// 两位数日期[1,28/29/30/31]
43     int              day() const { return toTm().tm_mday; }
44     /// 星期[1,7]
45     int              weekday() const { return toTm().tm_wday; }
46     /// 小时[0, 23]
47     int              hour() const { return toTm().tm_hour; }
48     /// 分钟[0, 59]
49     int              minute() const { return toTm().tm_min; }
50     /// 秒[0, 59]
51     int              second() const { return toTm().tm_sec; }
52     /// 毫秒[0,999]
53     int              millisecond() const { return static_cast<int>(floor(nanoSecond() / pow(10, 6))); }
54     /// 纳秒[0, 999999999]
55     int              nanoSecond() const { return static_cast<int>(count() % std::nano::den); }
56     /// 自1970-01-01 00:00:00起的纳秒数
57     int64_t          count() const { return m_TimePoint.time_since_epoch().count(); }
58 
59 private:
60     XTimePoint m_TimePoint{};
61 };
复制代码

 

  禅元天道  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示