【ThinkingInC++】48、用标准C库中的时间函数生成简单的Time类
Cpptime.h
/** * 书本:【ThinkingInC++】 * 功能:用标准C库中的时间函数生成简单的Time类 * 时间:2014年9月11日07:53:56 * 作者:cutter_point */ #ifndef CPPTIME_H_INCLUDED #define CPPTIME_H_INCLUDED #include<ctime> #include<cstring> //这里ctime和cstring是不包含using namespace std;的而后面加.h是C中的,是包含using namespace std;的 /* 而直接存储年月日的是一个结构: struct tm { int tm_sec; /*秒,正常范围0-59, 但允许至61* int tm_min; /*分钟,0-59* int tm_hour; /*小时, 0-23* int tm_mday; /*日,即一个月中的第几天,1-31* int tm_mon; /*月, 从一月算起,0-11*/ /*1+p->tm_mon; int tm_year; /*年, 从1900至今已经多少年* 1900+ p->tm_year; int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6* int tm_yday; /*从今年1月1日到目前的天数,范围0-365* int tm_isdst; /*日光节约时间的旗标* }; */ #include<iostream> class Time { std::time_t t; //time_t是一个类型time_t 这种类型就是用来存储从1970年到现在经过了多少秒 std::tm local; //tm是一个结构 char asciiRep[26]; unsigned char lflag, aflag; void updateLocal() { if(!lflag) { /* struct tm* gmtime(const time_t *timep); 将time_t表示的时间转换为没有经过时区转换的时间,是一个struct tm结构指针, struct tm* localtime(const time_t *timep); 和gmtime类似,但是它是经过时区转换的时间。 time_t 这种类型就是用来存储从1970年到现在经过了多少秒 这个函数就是把秒转换成我们看得懂的时间 */ local=*std::localtime(&t); ++lflag; } } void updateAscii() { if(!aflag) { updateLocal(); /* char *asctime(const struct tm* timeptr); 将结构中的信息转换为真实世界的时间,以字符串的形式显示 strcpy(char*, string/char*) 将第二个字符串拷贝到第一个上面 */ // std::cout<<"???"<<std::endl; std::strcpy(asciiRep, std::asctime(&local)); ++aflag; } } public: Time() {mark(); } void mark() { lflag=aflag=0; std::time(&t); //得到系统地时间time_t time(time_t *t);取得从1970年1月1日至今的秒数。 } const char* ascii() //返回一个const char*类型的数据 { updateAscii(); return asciiRep; } int delta(Time* dt) const //这个const表示这个函数不能改变类的成员数据 { /* oubledifftime(time_t time1, time_t time2); 返回两个时间相差的秒数 */ return int(std::difftime(t, dt->t)); } int daylightSaving() { updateLocal(); //int tm_isdst; //日光节约时间的旗标 return local.tm_isdst; } /* 而直接存储年月日的是一个结构: struct tm { int tm_sec; /*秒,正常范围0-59, 但允许至61* int tm_min; /*分钟,0-59* int tm_hour; /*小时, 0-23* int tm_mday; /*日,即一个月中的第几天,1-31* int tm_mon; /*月, 从一月算起,0-11*/ /*1+p->tm_mon; int tm_year; /*年, 从1900至今已经多少年* 1900+ p->tm_year; int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6* int tm_yday; /*从今年1月1日到目前的天数,范围0-365* int tm_isdst; /*日光节约时间的旗标* }; */ int dayOfYear() { // int tm_yday; /*从今年1月1日到目前的天数,范围0-365* updateLocal(); return local.tm_yday; } int dayOfWeek() { // int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6* updateLocal(); return local.tm_wday; } int since1900() { // int tm_year; /*年, 从1900至今已经多少年* 1900+ p->tm_year; updateLocal(); return local.tm_year; } int month() { // int tm_mon; /*月, 从一月算起,0-11*/ /*1+p->tm_mon; updateLocal(); return local.tm_mon; } int dayOfMonth() { // int tm_mday; /*日,即一个月中的第几天,1-31 updateLocal(); return local.tm_mday; } int hour() { // int tm_hour; /*小时, 0-23* updateLocal(); return local.tm_hour; } int minute() { // int tm_min; /*分钟,0-59* updateLocal(); return local.tm_min; } // int tm_sec; /*秒,正常范围0-59, 但允许至61* int second() { updateLocal(); return local.tm_sec; } }; #endif // CPPTIME_H_INCLUDED
Cpptime.cpp
/** * 书本:【ThinkingInC++】 * 功能:测试C++时间类 * 时间:2014年9月11日07:54:38 * 作者:cutter_point */ #include"Cpptime.h" #include<iostream> using namespace std; int main() { Time start; for(int i=1 ; i<5000 ; ++i) { cout<<i<<' '; if(i%10 == 0) cout<<endl; } Time end; cout<<endl; cout<<"start = "<<start.ascii()<<endl; cout<<"end = "<<end.ascii()<<endl; cout<<"delta = "<<end.delta(&start)<<endl; return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。