<pre name="code" class="cpp">#ifndef TIME_H_
#define TIME_H_
#include <ctime>
class Time
{
std::time_t t; // time_t是时间的起始时间,
std::tm local; // tm 就是时间的记录,
char asciiRep[26];
unsigned char lflag, aflag; // 这个就是为了做标记,
void updateLocal()
{
if (!lflag)
{
::localtime_s(&local, &t); // 这个是转换,
lflag++;
}
}
void updateAscii()
{
if (!aflag)
{
updateLocal();
asctime_s(asciiRep, &local);
aflag++;
}
}
public:
Time() { mark(); }
void mark()
{
lflag = 0;
aflag = 0;
std::time(&t);
}
const char* ascii() // 这个是转成字符串形式的,
{
updateAscii();
return asciiRep;
}
int delta(Time* dt) const
{
return int(::difftime(t, dt->t)); // 这个就是计算时间差,t 就是当前的时间,
}
int year() // 这个是访问函数,
{
updateLocal();
return local.tm_year + 1900;
}
int month() // 这个是访问函数,
{
updateLocal();
return local.tm_mon + 1;
}
int dayOfMonth() // 这个是访问函数,
{
updateLocal();
return local.tm_mday;
}
int hour()
{
updateLocal();
return local.tm_hour;
}
int minute()
{
updateLocal();
return local.tm_min;
}
int second()
{
updateLocal();
return local.tm_sec;
}
};
#endif
<pre name="code" class="cpp">#include <iostream>
#include "time.h"
using namespace std;
int main()
{
Time t;
cout << t.ascii() << endl;
cout << t.year() << endl;
cout << t.month() << endl;
cout << t.dayOfMonth() << endl;
cout << t.hour() << endl;
cout << t.minute() << endl;
cout << t.second() << endl;
Time start;
for (int i = 1; i < 10000; i++)
{
cout << i << ' ';
if (i % 10 == 0) cout << endl;
}
Time end;
cout << endl;
cout << "delta = " << end.delta(&start) << endl;
cout << endl;
return 0;
}