home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cslio205.zip / INCLUDE / CSDATE.H < prev    next >
C/C++ Source or Header  |  1997-01-21  |  6KB  |  174 lines

  1. /***********************************************************************
  2.  
  3.                        CSA Library, Free Evaluation Version 2.0.5 
  4.                                        Release: January 22th 1997 
  5.  
  6.        Header file of the csDATE class.
  7.        Also defines date formats.
  8.  
  9.        NOTE: The julian-date functions require floating point.
  10.              The other member functions of the class can be used without
  11.              forcing the floating point liberies to be linked int.
  12.  
  13.                                            Copyright(c) 1994-1997 
  14.                                                           ComBits 
  15.                                                   The Netherlands 
  16. ***********************************************************************/
  17.  
  18. #ifndef __CSDATE_H
  19. #define __CSDATE_H
  20.  
  21.  
  22. #include "time.h"
  23. #include "cstypes.h"
  24. #include "cswarnof.h"
  25. #include "csjulian.h"
  26.  
  27. enum f_date  {  MDY2,
  28.                 MY2D,
  29.                 Y2MD,
  30.                 Y2DM,
  31.                 DMY2,
  32.                 DY2M,
  33.                 MDY4,
  34.                 MY4D,
  35.                 Y4MD,
  36.                 Y4DM,
  37.                 DMY4,
  38.                 DY4M   };
  39.  
  40.  
  41.  
  42.  
  43. inline int leap_year(int J) {return ((J%400==0) || ((J%4==0) && (J%100!=0))); }
  44. inline int days_in_year(int j) { return 365+leap_year(j); }
  45. int  days_in_month(int mo,int year);
  46. int  days_in_month(int mo);
  47. int  date_validate(csCHAR *s,int format);
  48. void date_SN(csCHAR *s,int *x,int *y,int *z);
  49. void parm_ord(int ,int,int,int, int &,int & ,int &);
  50. void default_date_format(int );     // Sets the default format for the csDATE.
  51.  
  52.  
  53. /*
  54.   The frequently used frase 'semi-jul' refers to a represenation of a
  55.   date according to the formula: YEAR*512+MONTH*32+DAY.
  56.  
  57.   With YEAR in the 4 digit format,
  58.   MONTH in the range [1..12] and
  59.   DAY in the range [1..31].
  60.  
  61.  
  62. */
  63.  
  64.  
  65. class csDATE
  66. {
  67.  
  68. private:
  69.  
  70.   unsigned form :4;           // Date Format.
  71.   unsigned mo   :4;           // Month
  72.   unsigned y4   :1;           // TRUE if 4 digits for the year, FALSE otherwise.
  73.   unsigned da   :5;           // Day
  74.   S16      ye;                // Year
  75.  
  76. protected:
  77.  
  78.    int year4(int ye);
  79.  
  80.  
  81. public:
  82.  
  83.   S32 sem_jul(void);
  84.   S32 sem_jul(csCHAR *s);
  85.   S32 sem_jul(uchar *s)       { return sem_jul((csCHAR *)s); }
  86.   S32 sem_jul(int Y,int M,int D);
  87.  void sem_jul(S32 l);
  88.  
  89.  
  90.  
  91.   void format(int dat_f);  // Set the date format.
  92.    int format(void)        { return form; }
  93.                            // Returns the date format.
  94.    int day(void)           { return da; }
  95.                            // Returns the day of the month [1..31]
  96.    int day(csCHAR *);      // Returns also the name of the day,
  97.                            // [monday,tuesday,...sunday]
  98.   void day(int d)          { da=d; }
  99.                            // Sets the day.
  100.    int week_day(void);     // Returns the day of the week.
  101.                            // Monday=1, Tuesday=2, etc..
  102.    int month(void)         { return mo; }
  103.                            // Returns the month [1..12]
  104.    int month(csCHAR *);    // Returns also the name of the calendar month,
  105.                            // [January,February...December]
  106.   void month(int m)        { mo=m; }
  107.                            // Sets the month. (January==1)
  108.    int year(void)          { return ( (y4) ? ye: ye%100); }
  109.                            // Returns the year in 2 or 4 digits, depending
  110.                            // on the format.
  111.   void year(int y)         {  ye=y; }
  112.                            // Sets the year.
  113.                            // No century data is added or checked!
  114.    int year4(void)         { return ye; }
  115.                            // Returns the year with a 4 digit format.
  116.    int long_year(void)     { return y4; }
  117.                            // Returns TRUE if 4 positions are used
  118.                            // to represent the year. FALSE otherwise.
  119.    int leap_year(void)     {  return ::leap_year(ye); }
  120.                            // Returns TRUE if the date is a leap-year.
  121.                            // FALSE otherwise.
  122.   void julian(long j);     // Set date according to julian date.
  123.   long julian(void)        {  return cal_julian(mo,da,year4()); }
  124.                            // Returns Julian date.
  125.    int valid(void);        // Returns TRUE if the date is a valid
  126.                            // calendar date, FALSE otherwise.
  127.    void now(void);         // Make date equal to the system clock.
  128.    int  read_comp_time(csCHAR *s);
  129.    int  read_time_t(time_t t);
  130.  
  131.  
  132. ////////////////////// Constructor   /////////////////////////////
  133.    csDATE::csDATE(void);
  134.    csDATE::csDATE(csCHAR *s);
  135.  
  136. ////////////////////// Type casting  /////////////////////////////
  137.  
  138.    operator csCHAR*();
  139.  
  140.  
  141. ////////////////////// Operator overloading /////////////////////
  142.  
  143.  
  144.    int operator==(csDATE &da)    { return sem_jul()==da.sem_jul(); }
  145.    int operator!=(csDATE &da)    { return sem_jul()!=da.sem_jul(); }
  146.    int operator<( csDATE &da )   { return sem_jul()<da.sem_jul();  }
  147.    int operator<=(csDATE &da )   { return sem_jul()<=da.sem_jul(); }
  148.    int operator>( csDATE &da )   { return sem_jul()>da.sem_jul();  }
  149.    int operator>=(csDATE &da )   { return sem_jul()>=da.sem_jul(); }
  150.    int operator==(csCHAR *s)   { return sem_jul()==sem_jul(s); }
  151.    int operator!=(csCHAR *s)   { return sem_jul()!=sem_jul(s); }
  152.    int operator<( csCHAR *s )  { return sem_jul()<sem_jul(s);  }
  153.    int operator<=(csCHAR *s )  { return sem_jul()<=sem_jul(s); }
  154.    int operator>( csCHAR *s )  { return sem_jul()>sem_jul(s);  }
  155.    int operator>=(csCHAR *s )  { return sem_jul()>=sem_jul(s); }
  156.    int operator==(uchar *s)    { return sem_jul()==sem_jul(s); }
  157.    int operator!=(uchar *s)    { return sem_jul()!=sem_jul(s); }
  158.    int operator<( uchar *s )   { return sem_jul()<sem_jul(s);  }
  159.    int operator<=(uchar *s )   { return sem_jul()<=sem_jul(s); }
  160.    int operator>( uchar *s )   { return sem_jul()>sem_jul(s);  }
  161.    int operator>=(uchar *s )   { return sem_jul()>=sem_jul(s); }
  162.  
  163.    csDATE&  operator+=(long days);
  164.    csDATE&  operator-=(long days)  { return operator+=(-days); }
  165.    csDATE&  operator=(csDATE &);
  166.     long  operator-(csDATE &);
  167.    csDATE&  operator=(csCHAR *);
  168.  
  169.  
  170. };
  171.  
  172.  
  173. #endif
  174.