//: C09:Cpptime.h // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // A simple time class #ifndef CPPTIME_H #define CPPTIME_H #include <ctime> #include <cstring>
class Time { time_t t; tm local; char asciiRep[26]; unsigned char lflag, aflag; void updateLocal() { if(!lflag) { local = *localtime(;t); lflag++; } } void updateAscii() { if(!aflag) { updateLocal(); strcpy(asciiRep,asctime(;local)); aflag++; } } public: Time() { mark(); } void mark() { lflag = aflag = 0; time(;t); } const char* ascii() { updateAscii(); return asciiRep; } // Difference in seconds: int delta(Time* dt) const { return int(difftime(t, dt->t)); } int daylightSavings() { updateLocal(); return local.tm_isdst; } int dayOfYear() { // Since January 1 updateLocal(); return local.tm_yday; } int dayOfWeek() { // Since Sunday updateLocal(); return local.tm_wday; } int since1900() { // Years since 1900 updateLocal(); return local.tm_year; } int month() { // Since January updateLocal(); return local.tm_mon; } int dayOfMonth() { updateLocal(); return local.tm_mday; } int hour() { // Since midnight, 24-hour clock updateLocal(); return local.tm_hour; } int minute() { updateLocal(); return local.tm_min; } int second() { updateLocal(); return local.tm_sec; } }; #endif // CPPTIME_H ///:~ 使用示例:
//: C09:Cpptime.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Testing a simple time class #include "head.h" #include <iostream> using namespace std;
int main() { Time start; for(int i = 1; i < 1000; i++) { cout << i << ' '; if(i%10 == 0) cout << endl; } Time end; cout << endl; cout << "start = " << start.ascii(); cout << "end = " << end.ascii(); cout << "delta = " << end.delta(;start); } ///:~