00001 // ======================================================================== // 00002 // // 00003 // File : Date.h // 00004 // Purpose : // 00005 // Time-stamp: <Wed Dec/26/2001 14:02 MET Coder@ReallySoft.de> // 00006 // // 00007 // (C) December 2001 by Ralf Westram // 00008 // // 00009 // Permission to use, copy, modify, distribute and sell this software // 00010 // and its documentation for any purpose is hereby granted without fee, // 00011 // provided that the above copyright notice appear in all copies and // 00012 // that both that copyright notice and this permission notice appear // 00013 // in supporting documentation. // 00014 // // 00015 // Ralf Westram makes no representations about the suitability of this // 00016 // software for any purpose. It is provided "as is" without express or // 00017 // implied warranty. // 00018 // // 00019 // ======================================================================== // 00020 00021 #ifndef DATE_H 00022 #define DATE_H 00023 00024 #ifndef CTIME 00025 #include <ctime> 00026 #endif 00027 00028 namespace rs { 00029 00032 namespace date { 00033 00034 // -------------------- 00035 // class Date 00036 // -------------------- 00038 class Date { 00039 private: 00040 std::time_t time; 00041 std::tm date; 00042 bool valid; 00043 00044 void init(const std::time_t& time_); 00045 void init(const std::tm& date_); 00046 void init(int day, int month, int year); 00047 00048 void correct(); 00049 00050 public: 00052 Date() { std::time(&time); init(time); } 00053 00055 Date(int day_, int month_, int year_) { init(day_, month_, year_); } 00056 00058 Date(const std::tm& date_) { init(date_); } 00059 00061 Date(const Date& other) { 00062 time = other.time; 00063 date = other.date; 00064 valid = other.valid; 00065 } 00066 00068 Date& operator = (const Date& other) { 00069 if (&other != this) { 00070 time = other.time; 00071 date = other.date; 00072 valid = other.valid; 00073 } 00074 return *this; 00075 } 00076 00077 virtual ~Date() {} 00078 00080 bool is_valid() const { return valid; } 00081 00083 const std::tm& get_Date() const { return date; } 00084 00086 int is_Feiertag() const; 00087 00091 void inc(int offset = 1) { date.tm_mday += offset; correct(); } 00095 void dec(int offset = 1) { date.tm_mday -= offset; correct(); } 00096 00098 int year() const { return get_Date().tm_year+1900; } 00100 int month() const { return get_Date().tm_mon+1; } 00102 int day() const { return get_Date().tm_mday; } 00103 00105 int dayOfWeek() const { return get_Date().tm_wday; } 00106 }; 00107 00108 // some useful date functions : 00109 00113 inline bool is_leap_year(int year) { return Date(29, 2, year).is_valid(); } 00114 00118 const char *name_of_Feiertag(int feiertag_idx); 00119 00123 bool is_catholic(int feiertag_idx); 00124 00125 }; // end of namespace date 00126 }; // end of namespace rs 00127 00128 #else 00129 #error Date.h included twice 00130 #endif // DATE_H 00131
Contact me in case of errors or questions. This documentation is powered by . |
(C) 2000-2002 |