00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef VDKDATE_H
00028 #define VDKDATE_H
00029
00030 #include <math.h>
00031
00032
00033 #ifndef CALDATEDEBUG
00034 #define Assert(condition)
00035 #else
00036 #include <assert.h>
00037 #define Assert(condition) assert(condition)
00038 #endif
00039
00040
00041 #define IGREG (15L+31L*(10L+12L*1582L))
00042 enum { ddmmyyyy,mmddyyyy };
00043
00044
00045
00046
00047
00052 class calendardate
00053 {
00054 protected:
00055 int day,month,year;
00056 long julian;
00057 long Julian(void);
00058 void Caldate(void);
00059
00060 char* InternalBuffer();
00061 int mode;
00062 public:
00069 calendardate(int mode = mmddyyyy);
00079 calendardate(int day, int month, int year, int mode = mmddyyyy):
00080 day(day),month(month),year(year),mode(mode)
00081 {
00082 julian = Julian();
00083 }
00091 calendardate(long julian, int mode = mmddyyyy) :
00092 julian(julian),mode(mode)
00093 {
00094 Caldate();
00095 }
00104 calendardate(char* s, int mode = mmddyyyy, char* sep =".-/");
00108 virtual ~calendardate() {}
00109
00111 operator long() { return julian; }
00114 int DayIndex() { return (julian+1) % 7; }
00118 int Day() { return day; }
00122 int Month() { return month; }
00126 int Year() { return year; }
00133 char* CalendarDate();
00137 calendardate operator+(long d)
00138 { return calendardate(julian+d); }
00139 calendardate operator-(long d)
00140 { return calendardate(julian-d); }
00141 long operator-(calendardate& d)
00142 { return julian - d.julian; }
00143 calendardate& operator+=(long d)
00144 { *this = calendardate (julian+d); return *this; }
00145 calendardate& operator-=(long d)
00146 { *this = calendardate (julian-d); return *this; }
00152 operator char*();
00157 char* AsString();
00159 bool Valid() { return julian >= 0; }
00163 bool operator==(calendardate& d)
00164 { return julian == d.julian; }
00165 bool operator<(calendardate& d)
00166 { return julian < d.julian; }
00167 bool operator!=(calendardate& d)
00168 { return julian != d.julian; }
00169 bool operator>(calendardate& d)
00170 { return julian > d.julian; }
00171 bool operator>=(calendardate& d)
00172 { return julian >= d.julian; }
00173 bool operator<=(calendardate& d)
00174 { return julian <= d.julian; }
00175 };
00176
00177
00178
00179 inline bool Leap(int y)
00180 { return !(y%4) && ( y%100 || !(y%400)); }
00186 calendardate MakeDate(char* s, int mode = mmddyyyy);
00187
00188 #endif
00189