zoukankan      html  css  js  c++  java
  • 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驱动爱好者 服务器程序员沟通交流
    **************************************************************/
  • 相关阅读:
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
    Black And White HDU
    Robot Motion HDU
    A Knight's Journey POJ
    Find a way HDU
    排序 HDU
    Dungeon Master POJ
    Network Saboteur POJ
  • 原文地址:https://www.cnblogs.com/itdef/p/5474382.html
Copyright © 2011-2022 走看看