Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

FBwDate.h

00001 #ifndef MASDATE_HH
00002 #define MASDATE_HH
00003 using std::string;
00004 
00005 #define MX_FRMDATE  80
00006 #define MX_FRMTIME  80
00007 #define MX_FRMDATETIME  (MX_FRMDATE+MX_FRMTIME)
00008 
00010 class FBwDate
00011 {
00012     long dnum;
00013     static long reference;          // jdn of reference date
00014     static int YEAR_OF_EPOCH;       // Year of break for 2 digits year qtty
00015     static int CENTURY_OF_EPOCH;    // Century for 2 digits year qtty
00016     static char *dayw[7];
00017     static char *adayw[7];
00018     static char *monname[12];
00019     static char *amonname[12];
00020     static const char *deffmt;
00021     const char *curfmt;
00022     long rmjdn(long Y, long M, long D);
00023     void invrmjdn(long &Y, long &M, long &D) const;
00024     void Init();
00025 protected:
00027 
00034     virtual void ParseDate(const char *s,long &Y, long &M, long &D);
00036     int AdjustCentury(int Y);
00037     void SetDate(long dn)
00038     {
00039         dnum=dn;
00040     }
00041 public:
00043     FBwDate();
00045 
00049     FBwDate(long jdn);
00051 
00057     FBwDate(int y, int m, int d);
00059 
00062     FBwDate(const char *s);
00064 
00067     FBwDate(const string &s);
00069 
00072     FBwDate(const tm &tim);
00074     FBwDate(const FBwDate &d)
00075     {
00076         dnum=d.dnum;
00077     }
00079     FBwDate &operator=(const FBwDate &d)
00080     {
00081         dnum=d.dnum;
00082         return *this;
00083     }
00085 
00090     void IncMonth(int nMon);
00092     int operator <(const FBwDate &d) const
00093     {
00094         return dnum < d.dnum;
00095     }
00097     int operator <=(const FBwDate &d) const
00098     {
00099         return dnum <= d.dnum;
00100     }
00102     int operator==(const FBwDate &d) const
00103     {
00104         return dnum==d.dnum;
00105     }
00107     int operator!=(const FBwDate &d) const
00108     {
00109         return dnum!=d.dnum;
00110     }
00112     int operator==(const string &d) const ; 
00114     int operator >(const FBwDate &d) const
00115     {
00116         return dnum>d.dnum;
00117     }
00119     int operator >=(const FBwDate &d) const
00120     {
00121         return dnum>=d.dnum;
00122     }
00124     FBwDate &operator++()
00125     {
00126         dnum++;
00127         return *this;
00128     }
00130 
00133     FBwDate operator+(long v) const
00134     {
00135         return FBwDate(dnum+v);
00136     }
00138 
00141     FBwDate &operator+=(long v)
00142     {
00143         dnum+=v;
00144         return *this;
00145     }
00147     FBwDate operator-(long v) const
00148     {
00149         return FBwDate(dnum-v);
00150     }
00152     FBwDate &operator-=(long v)
00153     {
00154         dnum-=v;
00155         return *this;
00156     }
00158     long operator-(const FBwDate &d) const
00159     {
00160         return dnum-d.dnum;
00161     }
00163 
00168     string DateString(const char *format=0) const;
00170     long DateNum() const
00171     {
00172         return dnum;
00173     }
00175 
00184     int dayofw() const;
00186     void CurrentDate();
00188     time_t MkDate(tm *tim) const;
00190     friend void SetDefaultDateFormat(const char *form);
00192     friend void SetEpoch(int Year, int Century);
00194     FBwDate FirstOfMonth() const;
00196     FBwDate LastOfMonth() const;
00198     FBwDate FirstOfWeek() const;
00200     FBwDate LastOfWeek() const;
00202     FBwDate FirstOfYear() const;
00204     FBwDate LastOfYear() const;
00206     int DayOfYear() const;
00208     string NameOfDay() const;
00210     string NameOfMonth() const;
00212     string AbNameOfDay() const;
00214     string AbNameOfMonth() const;
00216     void EncodeDate(int Year, int Month, int Day)
00217     {
00218         dnum=rmjdn(Year,Month,Day);
00219     }
00221     void DecodeDate( int &Y, int &M, int &D) const;
00222     virtual const char *GetFormat()
00223     {
00224         return curfmt;
00225     }
00226 
00227 };
00228 
00229 class FBwTime
00230 {
00231     long tnum;
00232     static const char *deffmt;
00233     const char *curfmt;
00234     static const char *ampmstr[2];
00235     static int scale;           // number of fraction of a second that represents tnum=1
00236     void Init();
00237 protected:
00238     virtual bool ParseTime(const char *s,int &hours, int &minutes, int &seconds, int &mimlis);
00239     void SetTime(long tn)
00240     {
00241         tnum=tn;
00242     }
00243 public:
00245     FBwTime();
00247 
00250     FBwTime(long pTime);
00252 
00257     FBwTime(const string &s);
00259 
00264     FBwTime(const char *s);
00266 
00269     FBwTime(int hours, int minutes, int seconds=0, int milisec=0);
00271 
00274     FBwTime(const tm &tim);
00276     FBwTime(const FBwTime &pTime)
00277     {
00278         tnum=pTime.tnum;
00279     }
00281 
00285     string TimeString(const char *format=0) const;
00287     friend void SetDefaultTimeFormat(const char *fmt);
00289     friend void SetTimeScale(int scale);
00291     int Seconds() const;
00293     int Minutes() const;
00295     int Hours() const;
00297     long TimeNum() const
00298     {
00299         return tnum;
00300     }
00301     void EncodeTime(int hours, int minutes, int seconds, int miliseconds=0);
00302     void DecodeTime(int &hours, int &minutes, int &seconds, int &miliseconds) const;
00304     FBwTime operator+(const FBwTime &t)
00305     {
00306         return FBwTime(tnum+t.tnum);
00307     }
00309     FBwTime operator+=(const FBwTime &t)
00310     {
00311         tnum+=t.tnum;
00312     }
00314     FBwTime operator-(const FBwTime &t)
00315     {
00316         return FBwTime(tnum-t.tnum);
00317     }
00319     FBwTime operator-=(const FBwTime &t)
00320     {
00321         tnum -= t.tnum;
00322     }
00324     void CurrentTime();
00326     time_t MkTime(tm *tim) const;
00328     int operator==(const FBwTime &t) const
00329     {
00330         return tnum==t.tnum;
00331     }
00333     int operator !=(const FBwTime &t) const
00334     {
00335         return tnum != t.tnum;
00336     }
00338     int operator <(const FBwTime &t) const
00339     {
00340         return tnum < t.tnum;
00341     }
00343     int operator <=(const FBwTime &t) const
00344     {
00345         return tnum <= t.tnum;
00346     }
00348     int operator >(const FBwTime &t) const
00349     {
00350         return tnum > t.tnum;
00351     }
00353     int operator >=(const FBwTime &t) const
00354     {
00355         return tnum >= t.tnum;
00356     }
00358 
00362     int Normalize();
00363 };
00364 
00365 
00367 
00370 class FBwDateTime :  public FBwDate, public FBwTime
00371 {
00372     static const char *deffmt;
00373     const char *curfmt;
00374 protected:
00375     virtual bool ParseDateTime(const char *s,FBwDate &d,FBwTime &t) const;
00376     void Init();
00377 public:
00379     FBwDateTime() :
00380         FBwDate(),FBwTime()
00381     {
00382         Init();
00383     }
00385 
00389     FBwDateTime(const FBwDate &d) :
00390             FBwDate(d),FBwTime()
00391     {
00392         Init();
00393     }
00395 
00399     FBwDateTime(const FBwTime &t) :
00400             FBwDate(),FBwTime(t)
00401     {
00402         DateNormalize();
00403         Init();
00404     }
00406 
00409     FBwDateTime(const FBwDate &d,const FBwTime &t) :
00410             FBwDate(d),FBwTime(t)
00411     {
00412         DateNormalize();
00413         Init();
00414     }
00416     FBwDateTime(long pdate, long ptime):
00417             FBwDate(pdate),FBwTime(ptime)
00418     {
00419         DateNormalize();
00420         Init();
00421     }
00422     FBwDateTime(const tm &tim);
00423     FBwDateTime(const string &s);
00425     FBwDate AsDate() const
00426     {
00427         return FBwDate(DateNum());
00428     }
00430     FBwTime AsTime() const
00431     {
00432         return FBwTime(TimeNum());
00433     }
00435     int operator==(const FBwDateTime &dt) const
00436     {
00437             return (DateNum()==dt.DateNum()) && (TimeNum()==dt.TimeNum());
00438     }
00440     int operator!=(const FBwDateTime &dt) const
00441     {
00442             return (DateNum()!=dt.DateNum()) || (TimeNum()==dt.TimeNum());
00443     }
00445     int operator<(const FBwDateTime &dt) const
00446     {
00447             return (DateNum()<dt.DateNum()) || (TimeNum()<dt.TimeNum() && DateNum()==dt.DateNum());
00448     }
00450     int operator<=(const FBwDateTime &dt) const
00451     {
00452             return (DateNum()<=dt.DateNum()) || (TimeNum()<=dt.TimeNum() && DateNum()==dt.DateNum());
00453     }
00455     int operator>(const FBwDateTime &dt) const
00456     {
00457             return (DateNum()>dt.DateNum()) || (TimeNum()>dt.TimeNum() && DateNum()==dt.DateNum());
00458     }
00460     int operator>=(const FBwDateTime &dt) const
00461     {
00462             return (DateNum()>=dt.DateNum()) || (TimeNum()>=dt.TimeNum() && DateNum()==dt.DateNum());
00463     }
00465     FBwDateTime operator+(const FBwDateTime &dt) const
00466     {
00467         FBwDateTime xdt(DateNum()+dt.DateNum(),TimeNum()+dt.TimeNum());
00468         xdt.Normalize();
00469         return xdt;
00470     }
00472     FBwDateTime operator-(const FBwDateTime &dt) const
00473     {
00474         FBwDateTime xdt(DateNum()-dt.DateNum(),TimeNum()-dt.TimeNum());
00475         xdt.DateNormalize();
00476         return xdt;
00477     }
00479     FBwDateTime operator+(const FBwDate &d) const
00480     {
00481         FBwDateTime xdt(DateNum()+d.DateNum(),TimeNum());
00482         return xdt;
00483     }
00485     FBwDateTime operator-(const FBwDate &d) const
00486     {
00487         FBwDateTime xdt(DateNum()+d.DateNum(),TimeNum());
00488         return xdt;
00489     }
00491     FBwDateTime operator+(const FBwTime &t) const
00492     {
00493         FBwDateTime xdt(DateNum(),TimeNum()+t.TimeNum());
00494         xdt.Normalize();
00495         return xdt;
00496     }
00498     FBwDateTime operator-(const FBwTime &t) const
00499     {
00500         FBwDateTime xdt(DateNum(),TimeNum()-t.TimeNum());
00501         xdt.DateNormalize();
00502         return xdt;
00503     }
00505     FBwDateTime operator+(int days) const
00506     {
00507         FBwDateTime xdt(DateNum()+days,TimeNum());
00508         return xdt;
00509     }
00511     FBwDateTime operator-(int days) const
00512     {
00513         FBwDateTime xdt(DateNum()-days,TimeNum());
00514         return xdt;
00515     }
00517     void DateNormalize()
00518     {
00519         SetDate(DateNum()+Normalize());
00520     }
00522 
00526     string DateTimeString(const char *fmt=NULL) const;
00527     time_t MkDateTime(tm *tim) const;
00529     void CurrentDateTime()
00530     {
00531         CurrentDate();
00532         CurrentTime();
00533     }
00534     virtual const char *GetFormat()
00535     {
00536         return curfmt;
00537     }
00538 };
00539 
00540 #endif

Generated on Fri Jan 31 08:30:01 2003 for fbwrap by doxygen1.2.17