home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / c / WLIB.ZIP / WTIME.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-21  |  8.5 KB  |  226 lines

  1. #ifndef WTimeIncluded
  2. #define WTimeIncluded
  3.  
  4. // copyright (c) 1992, 1993 by Paul Wheaton
  5. // 1916 Brooks #205, Missoula, MT  59801
  6. //
  7. // voice phone:  (406)543-7543
  8. // modem phone:  (406)543-1144 (2400N81)
  9. //  CompuServe:  72707,207
  10. //    Internet:  72707.207@CompuServe.com
  11.  
  12. #include <WStr.h>
  13.  
  14. extern const char* MonthName[13]; // 0 is nothing, 1 is January
  15. extern const char* WeekdayName[7];  // 0 is Monday
  16.  
  17. class JulianDate;
  18.  
  19. class Date
  20.   {
  21.       int Y,M,D;  // Year, Month, Day
  22.       friend JulianDate;
  23.     public:
  24.       Date(int Year, int Month, int Day){Y=Year;M=Month;D=Day;}
  25.         //  Some of you programming greenhorns may be offended at the order
  26.         //  of these parameters - more than once it paid off for me to order
  27.         //  my stuff this way - most significant value first.
  28.       Date(){Y=0;M=0;D=0;}
  29.       Date(const JulianDate&);
  30.       Date(const Date& X){Y=X.Y; M=X.M; D=X.D;}
  31.       Date(const char* Text);
  32.       int Year() const {return Y;}
  33.       int Month() const {return M;}
  34.       String40 MonthStr() const;  // e.g. "January"
  35.       String40 MonthStr2() const; // e.g. "01" "02" ... "12"
  36.       String40 DayStr() const;    // e.g. "01" "02" ... "31"
  37.       String40 FullDesc() const;  // e.g. "Wednesday, September 24, 1965"
  38.       String40 ShortDesc() const; // e.g. "09-24-1965"
  39.       int Day() const {return D;}
  40.       int DOW() const;
  41.       String40 DayName() const;   // e.g. "Monday"
  42.       String40 RelativePastStr() const;
  43.       void SetYear(int Year){Y=Year;}
  44.       void SetMonth(int Month){M=Month;}
  45.       void SetDay(int Day){D=Day;}
  46.       Bool Valid() const; //  test to see if the date is a valid Gregorian day
  47.  
  48.       void operator=(const JulianDate&);
  49.       void operator=(const Date& X){Y=X.Y; M=X.M; D=X.D;}
  50.  
  51.       Bool operator==(const JulianDate&) const;
  52.       Bool operator<=(const JulianDate&) const;
  53.       Bool operator>=(const JulianDate&) const;
  54.       Bool operator!=(const JulianDate&) const;
  55.       Bool operator<(const JulianDate&) const;
  56.       Bool operator>(const JulianDate&) const;
  57.  
  58.       JulianDate operator+(long Days) const;
  59.       JulianDate operator-(long Days) const;
  60.       long operator-(const JulianDate&) const;
  61.       JulianDate operator++(); // prefix operators
  62.       JulianDate operator--();
  63.       JulianDate operator++(int);  // postfix operators
  64.       JulianDate operator--(int);
  65.       void operator+=(long Days);
  66.       void operator-=(long Days);
  67.       #ifdef MAJORBBS
  68.         void* operator new(size_t size){return malloc(size);}
  69.         void  operator delete(void* p) {free(p);}
  70.       #endif
  71.   };
  72.  
  73. class Moment;
  74.  
  75. const long MinutesInADay=1440;
  76.  
  77. class JulianDate
  78.   {
  79.       long J;  //  number of days since Jan 1, 0000
  80.       friend Date;
  81.       friend class Moment;
  82.       JulianDate(long JJ){J=JJ;}
  83.     public:
  84.       JulianDate(int Year, int Month, int Day);
  85.       JulianDate(){J=0;}
  86.       JulianDate(const JulianDate& JJ){J=JJ.J;}
  87.       JulianDate(const Date&);
  88.       JulianDate(const Moment& M);// {J=long(M)/MinutesInADay;}
  89.       long Val(){return J;}
  90.       int Year() const;
  91.       int Month() const;
  92.       int Day() const;
  93.       int DOW() const {return int((J-2)%7);}
  94.       String40 DayName() const;
  95.       String40 FullDesc();
  96.       String40 ShortDesc(){return Date(*this).ShortDesc();}
  97.       String40 RelativePastStr(Bool AlphaDate=True) const;
  98.       void SetYear(int Year);
  99.       void SetMonth(int Month);
  100.       void SetDay(int Day);
  101.  
  102.       void operator=(const JulianDate& JJ){J=JJ.J;}
  103.       void operator=(const Date&);
  104.  
  105.       Bool operator==(const JulianDate& JJ) const {return Bool(J==JJ.J);}
  106.       Bool operator<=(const JulianDate& JJ) const {return Bool(J<=JJ.J);}
  107.       Bool operator>=(const JulianDate& JJ) const {return Bool(J>=JJ.J);}
  108.       Bool operator!=(const JulianDate& JJ) const {return Bool(J!=JJ.J);}
  109.       Bool operator<(const JulianDate& JJ) const {return Bool(J<JJ.J);}
  110.       Bool operator>(const JulianDate& JJ) const {return Bool(J>JJ.J);}
  111.       Bool operator==(long JJ) const {return Bool(J==JJ);}
  112.       Bool operator<=(long JJ) const {return Bool(J<=JJ);}
  113.       Bool operator>=(long JJ) const {return Bool(J>=JJ);}
  114.       Bool operator!=(long JJ) const {return Bool(J!=JJ);}
  115.       Bool operator<(long JJ) const {return Bool(J<JJ);}
  116.       Bool operator>(long JJ) const {return Bool(J>JJ);}
  117.       friend Bool operator==(long J,const JulianDate& JJ) {return Bool(J==JJ.J);}
  118.       friend Bool operator<=(long J,const JulianDate& JJ) {return Bool(J<=JJ.J);}
  119.       friend Bool operator>=(long J,const JulianDate& JJ) {return Bool(J>=JJ.J);}
  120.       friend Bool operator!=(long J,const JulianDate& JJ) {return Bool(J!=JJ.J);}
  121.       friend Bool operator<(long J,const JulianDate& JJ) {return Bool(J<JJ.J);}
  122.       friend Bool operator>(long J,const JulianDate& JJ) {return Bool(J>JJ.J);}
  123.  
  124.       JulianDate operator+(long Days) const;
  125.       JulianDate operator-(long Days) const;
  126.       long operator-(const JulianDate& JJ) const {return J-JJ.J;}
  127.       JulianDate operator++(){J++; return *this;}
  128.       JulianDate operator--(){J--; return *this;}
  129.       JulianDate operator++(int);
  130.       JulianDate operator--(int);
  131.       void operator+=(long Days){J+=Days;}
  132.       void operator-=(long Days){J-=Days;}
  133.       #ifdef MAJORBBS
  134.         void* operator new(size_t size){return malloc(size);}
  135.         void  operator delete(void* p) {free(p);}
  136.       #endif
  137.   };
  138.  
  139. Date Today();
  140.  
  141. class Moment;
  142.  
  143. class Time  // still working on this one
  144.   {
  145.       int H; // 0..23
  146.       int M; // 0..59
  147.       int S; // 0..59
  148.     public:
  149.       Time(int Hr=0, int Min=0, int Sec=0){H=Hr; M=Min; S=Sec;}
  150.       Time(const Moment&);
  151.       String40 Desc();
  152.       String40 ShortDesc();
  153.       #ifdef MAJORBBS
  154.         void* operator new(size_t size){return malloc(size);}
  155.         void  operator delete(void* p) {free(p);}
  156.       #endif
  157.   };
  158.  
  159. Time CurTime();
  160.  
  161. class Moment
  162.   {
  163.       long M;
  164.     public:
  165.       Moment(long X=0){M=X;}
  166.       Moment(Moment& MM){M=MM.M;}
  167.       Moment(const JulianDate& J){M=J.J*MinutesInADay;}
  168.       Moment(const JulianDate& J, const Time&);
  169.       Moment(const JulianDate& J, int Hour, int Minute);
  170.       operator long() const {return M;}
  171.       //operator JulianDate();//{return JulianDate(M/MinutesInADay);}
  172.       int MinCount(){return int(M%MinutesInADay);}
  173.       void SetMinCount(int X){M=M-MinCount()+X;}
  174.       void operator=(long X){M=X;}
  175.       void operator=(Moment MM){M=MM.M;}
  176.       // comparison operators
  177.       Bool operator==(long X) const {return (M==X);}
  178.       Bool operator!=(long X) const {return (M!=X);}
  179.       Bool operator<=(long X) const {return (M<=X);}
  180.       Bool operator>=(long X) const {return (M>=X);}
  181.       Bool operator<(long X)  const {return (M<X);}
  182.       Bool operator>(long X)  const {return (M>X);}
  183.       Bool operator==(Moment X) const {return (M==X.M);}
  184.       Bool operator!=(Moment X) const {return (M!=X.M);}
  185.       Bool operator<=(Moment X) const {return (M<=X.M);}
  186.       Bool operator>=(Moment X) const {return (M>=X.M);}
  187.       Bool operator<(Moment X)  const {return (M<X.M);}
  188.       Bool operator>(Moment X)  const {return (M>X.M);}
  189.       friend Bool operator==(long X, Moment M) {return (X==M.M);}
  190.       friend Bool operator!=(long X, Moment M) {return (X!=M.M);}
  191.       friend Bool operator<=(long X, Moment M) {return (X<=M.M);}
  192.       friend Bool operator>=(long X, Moment M) {return (X>=M.M);}
  193.       friend Bool operator<(long X, Moment M)  {return (X<M.M);}
  194.       friend Bool operator>(long X, Moment M)  {return (X>M.M);}
  195.       // modifiers
  196.       void operator+=(long X){M+=X;}
  197.       void operator+=(Moment MM)
  198.           {FatalError("increment a moment by a moment");} // not allowed
  199.       void operator-=(long X){M-=X;}
  200.       void operator-=(Moment MM)
  201.           {FatalError("increment a moment by a moment");} // not allowed
  202.       Moment operator-(long X);
  203.       long operator-(Moment MM){return (M-MM.M);}
  204.       Moment operator+(long X);
  205.       void operator+(Moment);  // not allowed
  206.       friend Moment operator+(long X, Moment M);
  207.       String40 RelativeDesc();
  208.       String40 FullDesc();
  209.       String40 ShortDesc();
  210.       #ifdef MAJORBBS
  211.         void* operator new(size_t size){return malloc(size);}
  212.         void  operator delete(void* p) {free(p);}
  213.       #endif
  214.   };
  215.  
  216. inline JulianDate::JulianDate(const Moment& M)
  217.   {J=long(M)/MinutesInADay;}
  218.  
  219. Bool LeapYear(int Year);
  220.  
  221. Moment CurMoment();  // number of minutes passed since 1-1-0000
  222. int CurMinCount();  // number of minutes passed since midnight
  223.  
  224.  
  225. #endif
  226.