c11时间库一个小例子

#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)

 

/**************************************************************
技术博客
http://www.cnblogs.com/itdef/
 
技术交流群
群号码:324164944
 
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/

posted on 2016-05-09 16:29  itdef  阅读(382)  评论(0)    收藏  举报

导航