Linux下时间相关



/*
与时间相关的定义所在的文件夹
/usr/include/time.h 
/usr/include/bits/time.h

struct timeval 

time_t tv_sec; 
susecond_t tv_usec; //当前妙内的微妙数 
};


struct tm   
{   
int tm_sec; //当前秒    
int tm_min; //当前分钟    
int tm_hour; //当前小时    
int tm_mday; //当前在本月中的天,如11月1日,则为1    
int tm_mon; //当前月,范围是0~11    
int tm_year; //当前年和1900的差值,如2006年则为36    
int tm_wday; //当前在本星期中的天,范围0~6    
int tm_yday; //当前在本年中的天,范围0~365    
int tm_isdst; //这个我也不清楚    
}   


int getSystemTime()   
{   
time_t timer;   
struct tm* t_tm;   
time(&timer);   
t_tm = localtime(&timer);   
printf("today is %4d%02d%02d%02d%02d%02d/n", t_tm.tm_year+1900,   
t_tm.tm_mon+1, t_tm.tm_mday, t_tm.tm_hour, t_tm.tm_min, t_tm.tm_sec);   
return 0;   



//timeval 记录了距离UTC时间的秒数和微秒数 timezone代表不同的时区 成功返回0 失败返回-1
int gettimeofday (struct timeval * tv, struct timezone * tz)




值语义与对象语义:
copyable 值语义 可以进行拷贝的 拷贝后新的对象与原来的对象脱离关系
noncopyable 对象语义 不可拷贝的(将拷贝构造和赋值构造设置为私有的) 拷贝后与原来的对象存在一定的关系 通常需要自己实现拷贝构造函数


boost::less_than_comparable 如果我们需要重载比较运算符的时候 我们可以通过继承该类 只需要我们实现了<运算操作符 便可以自动推导出其他运算符
*/




BOOST_STATIC_ASSERT(sizeof(TimeStamp) == sizeof(int64_t))  //静态断言 在编译器检查


#define MICORSECOND 1000 * 1000


class TimeStamp
{


TimeStamp();
TimeStamp(int64_t micorsecond_since_UTC);

//通过gettimeofday 获取当前的时间 
static TimeStamp now();

bool operator<(const TimeStamp& ts1, const TimeStamp& ts2);

bool operator==(const TimeStamp& ts1, const TimeStamp& ts2);

//获取两个时间的差值 秒数
double time_of_diff(const TimeStamp& time_stamp1, const TimeStamp& time_stamp2);


//格式化输出字符串
std::string toFormatString(const TimeStamp& time_stamp);

private:
int64_t _micorsecond_since_UTC;
};




TimeStamp::TimeStamp():_micorsecond_since_UTC(0)
{

}


TimeStamp::TimeStamp(int micorsecond_since_UTC):_micorsecond_since_UTC(micorsecond_since_UTC)
{


}


inline TimeStamp TimeStamp::now()
{
struct timeval tm;
gettimeofday(&tm, NULL);
return TimeStamp(tm.tv_sec* MICORSECOND + tm.tv_usec);
}


inline bool TimeStamp::operator<(const TimeStamp& ts1, const TimeStamp& ts2)
{
return ts1._micorsecond_since_UTC < ts2._micorsecond_since_UTC ? true : false;
}


inline bool TimeStamp::operator==(const TimeStamp& ts1, const TimeStamp& ts2)
{
return ts1._micorsecond_since_UTC == ts2._micorsecond_since_UTC;
}


inline string TimeStamp::toFormatString(const TimeStamp& ts)
{
char buf[30];
time_t timer;   
struct tm* t_tm;   

time(&timer);   
t_tm = localtime(&timer); 
snprintf(buf,"%4d%02d%02d%02d%02d%02d", t_tm.tm_year+1900,   
t_tm.tm_mon+1, t_tm.tm_mday, t_tm.tm_hour, t_tm.tm_min, t_tm.tm_sec);

return buf;
}


inline double TimeStamp(const TimeStamp& ts1, cosnt Timestamp& ts2)
{
return static_case<double>(ts1._micorsecond_since_UTC -ts2.micorsecond_since_UTC / MICORSECOND);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值