#pragma once
#include <chrono>
#include <string>
#include <iostream>
#include <ctime>
#include <iomanip>
#define NAMESPACE(x) namespace x{
#define NAMESPACEEND(x) }
NAMESPACE(DEF)
const int kMicroSecondsPerSecond = 1000 * 1000;
class Timestamp
{
public:
Timestamp() {};
void TimestampSet(const Timestamp& t) {
time_ = t.time_;
};
bool valid() const { return time_.time_since_epoch().count() > 0; }
int64_t MicroSecondsSinceEpoch() const { return time_.time_since_epoch().count(); }
void Now() { time_ = std::chrono::system_clock::now();};
std::string Timestamp::ToFormattedString() const;
std::string ToString() const {
char buf[32] = { 0 };
auto s1 = std::chrono::duration_cast<std::chrono::microseconds>
(time_.time_since_epoch()).count();
snprintf(buf, sizeof(buf) - 1, "%lld.%06lld", s1 / kMicroSecondsPerSecond, s1 % kMicroSecondsPerSecond);
//printf("buf %s\n", buf);
return buf;
};
const std::chrono::time_point<std::chrono::system_clock>&
Time() { return time_; };
private:
std::chrono::time_point<std::chrono::system_clock> time_;
};
inline bool operator<(Timestamp lhs, Timestamp rhs)
{
return lhs.Time() < rhs.Time();
}
inline bool operator==(Timestamp lhs, Timestamp rhs)
{
return lhs.Time() == rhs.Time();
}
inline bool operator>(Timestamp lhs, Timestamp rhs)
{
return lhs.Time() > rhs.Time();
}
inline bool operator>=(Timestamp lhs, Timestamp rhs)
{
return lhs.Time() >= rhs.Time();
}
inline int64_t timeDifference(Timestamp high, Timestamp low)
{
return (high.Time() - low.Time()).count();
}
std::string Timestamp::ToFormattedString() const
{
auto t = std::chrono::system_clock::to_time_t(time_);
char mbstr[100] = {0};
if (std::strftime(mbstr, sizeof(mbstr), "%Y_%m_%d_%H_%M_%S", std::localtime(&t)))
{
return mbstr;
}
return mbstr;
}
NAMESPACEEND(DEF)
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力