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 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步