home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / cslib16b / include / csdate.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-01  |  5.0 KB  |  158 lines

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