/*
与时间相关的定义所在的文件夹
/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);
}