home *** CD-ROM | disk | FTP | other *** search
- //: C09:Cpptime.h
- // From Thinking in C++, 2nd Edition
- // Available at http://www.BruceEckel.com
- // (c) Bruce Eckel 1999
- // Copyright notice in Copyright.txt
- // A simple time class
- #ifndef CPPTIME_H
- #define CPPTIME_H
- #include <ctime>
- #include <cstring>
-
- class Time {
- std::time_t t;
- std::tm local;
- char asciiRep[26];
- unsigned char lflag, aflag;
- void updateLocal() {
- if(!lflag) {
- local = *std::localtime(&t);
- lflag++;
- }
- }
- void updateAscii() {
- if(!aflag) {
- updateLocal();
- std::strcpy(asciiRep,std::asctime(&local));
- aflag++;
- }
- }
- public:
- Time() { mark(); }
- void mark() {
- lflag = aflag = 0;
- std::time(&t);
- }
- const char* ascii() {
- updateAscii();
- return asciiRep;
- }
- // Difference in seconds:
- int delta(Time* dt) const {
- return std::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 ///:~
-